R - 如何在条件下将顺序列添加到数据框?
R - How to add sequential columns to dataframe on conditional?
我有一个数据框:
from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 darkgrey
12 110780 110783 darkgrey
13 110780 110784 darkgrey
14 110780 110782 darkgrey
15 110781 110783 darkgrey
16 110781 110784 darkgrey
17 110781 110782 darkgrey
18 110783 110784 darkgrey
19 110783 110782 darkgrey
20 110784 110782 darkgrey
21 20285 20286 darkgrey
22 20285 20287 darkgrey
23 20285 20692 red
24 20285 20693 red
25 20286 20287 darkgrey
26 20286 20692 darkgrey
27 20286 20693 darkgrey
28 20287 20692 darkgrey
29 20287 20693 darkgrey
30 83962 83963 darkgrey
31 83962 83964 darkgrey
32 83962 83960 darkgrey
33 83962 83961 red
34 83963 83964 darkgrey
35 83963 83960 darkgrey
36 83963 83961 darkgrey
37 83964 83960 red
38 83964 83961 darkgrey
39 88564 88565 darkgrey
40 88824 88825 darkgrey
41 88824 88826 darkgrey
42 88824 88565 darkgrey
43 88825 88826 darkgrey
44 88825 88565 red
45 88826 88565 darkgrey
46 72276 72272 red
47 72276 72273 darkgrey
48 72276 72274 darkgrey
49 72276 72275 darkgrey
50 111062 111058 darkgrey
51 111062 111059 darkgrey
52 111062 111060 red
53 111062 111061 darkgrey
54 111074 111070 red
55 111074 111071 red
56 111074 111072 darkgrey
57 111074 111073 darkgrey
我想添加另外两列,它们是序列号,分为一组奇数和偶数,像这样到这个数据框:
from to color f t
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red 1 2
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 darkgrey
12 110780 110783 darkgrey
13 110780 110784 darkgrey
14 110780 110782 darkgrey
15 110781 110783 darkgrey
16 110781 110784 darkgrey
17 110781 110782 darkgrey
18 110783 110784 darkgrey
19 110783 110782 darkgrey
20 110784 110782 darkgrey
21 20285 20286 darkgrey
22 20285 20287 darkgrey
23 20285 20692 red 3 4
24 20285 20693 red 5 6
25 20286 20287 darkgrey
26 20286 20692 darkgrey
27 20286 20693 darkgrey
28 20287 20692 darkgrey
29 20287 20693 darkgrey
30 83962 83963 darkgrey
31 83962 83964 darkgrey
32 83962 83960 darkgrey
33 83962 83961 red 7 8
34 83963 83964 darkgrey
35 83963 83960 darkgrey
36 83963 83961 darkgrey
37 83964 83960 red 9 10
38 83964 83961 darkgrey
39 88564 88565 darkgrey
40 88824 88825 darkgrey
41 88824 88826 darkgrey
42 88824 88565 darkgrey
43 88825 88826 darkgrey
44 88825 88565 red 11 12
45 88826 88565 darkgrey
46 72276 72272 red 13 14
47 72276 72273 darkgrey
48 72276 72274 darkgrey
49 72276 72275 darkgrey
50 111062 111058 darkgrey
51 111062 111059 darkgrey
52 111062 111060 red 15 16
53 111062 111061 darkgrey
54 111074 111070 red 17 18
55 111074 111071 red 19 20
56 111074 111072 darkgrey
57 111074 111073 darkgrey
我想将空的留给 NA(我在上面的 df 中将它们遗漏了)。
我可以使用 which
获取要更新的行的索引:
which(df$color == "red")
[1] 7 23 24 33 37 44 46 52 54 55
我可以根据这个创建两个奇数和偶数序列:
odd <- seq(from = 1, to = 2*length(which(cluster_data_updated_illegal_combined$color == "red")), by = 2)
even <- seq(from = 2, to = 2*length(which(cluster_data_updated_illegal_combined$color == "red")), by = 2)
> odd
[1] 1 3 5 7 9 11 13 15 17 19
> even
[1] 2 4 6 8 10 12 14 16 18 20
但我如何将这些组合起来以添加上面的序号?
先把所有的列都填满NA。
df$f = NA
df$t = NA
然后使用 which 更新必要的行
df$f[which(df$color == "red")] = odd
df$t[which(df$color == "red")] = even
初始化空列后,
df$f <- NA
df$n <- NA
您可以使用尺寸正确的矩阵作为 color=="red"
:
两列的掩码
red_matrix <- matrix(1:(length(which(df$color == "red")) *2), ncol = 2, byrow = TRUE )
df[df$color == "red", c("f","n")] <- length_red
我有一个数据框:
from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 darkgrey
12 110780 110783 darkgrey
13 110780 110784 darkgrey
14 110780 110782 darkgrey
15 110781 110783 darkgrey
16 110781 110784 darkgrey
17 110781 110782 darkgrey
18 110783 110784 darkgrey
19 110783 110782 darkgrey
20 110784 110782 darkgrey
21 20285 20286 darkgrey
22 20285 20287 darkgrey
23 20285 20692 red
24 20285 20693 red
25 20286 20287 darkgrey
26 20286 20692 darkgrey
27 20286 20693 darkgrey
28 20287 20692 darkgrey
29 20287 20693 darkgrey
30 83962 83963 darkgrey
31 83962 83964 darkgrey
32 83962 83960 darkgrey
33 83962 83961 red
34 83963 83964 darkgrey
35 83963 83960 darkgrey
36 83963 83961 darkgrey
37 83964 83960 red
38 83964 83961 darkgrey
39 88564 88565 darkgrey
40 88824 88825 darkgrey
41 88824 88826 darkgrey
42 88824 88565 darkgrey
43 88825 88826 darkgrey
44 88825 88565 red
45 88826 88565 darkgrey
46 72276 72272 red
47 72276 72273 darkgrey
48 72276 72274 darkgrey
49 72276 72275 darkgrey
50 111062 111058 darkgrey
51 111062 111059 darkgrey
52 111062 111060 red
53 111062 111061 darkgrey
54 111074 111070 red
55 111074 111071 red
56 111074 111072 darkgrey
57 111074 111073 darkgrey
我想添加另外两列,它们是序列号,分为一组奇数和偶数,像这样到这个数据框:
from to color f t
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red 1 2
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 darkgrey
12 110780 110783 darkgrey
13 110780 110784 darkgrey
14 110780 110782 darkgrey
15 110781 110783 darkgrey
16 110781 110784 darkgrey
17 110781 110782 darkgrey
18 110783 110784 darkgrey
19 110783 110782 darkgrey
20 110784 110782 darkgrey
21 20285 20286 darkgrey
22 20285 20287 darkgrey
23 20285 20692 red 3 4
24 20285 20693 red 5 6
25 20286 20287 darkgrey
26 20286 20692 darkgrey
27 20286 20693 darkgrey
28 20287 20692 darkgrey
29 20287 20693 darkgrey
30 83962 83963 darkgrey
31 83962 83964 darkgrey
32 83962 83960 darkgrey
33 83962 83961 red 7 8
34 83963 83964 darkgrey
35 83963 83960 darkgrey
36 83963 83961 darkgrey
37 83964 83960 red 9 10
38 83964 83961 darkgrey
39 88564 88565 darkgrey
40 88824 88825 darkgrey
41 88824 88826 darkgrey
42 88824 88565 darkgrey
43 88825 88826 darkgrey
44 88825 88565 red 11 12
45 88826 88565 darkgrey
46 72276 72272 red 13 14
47 72276 72273 darkgrey
48 72276 72274 darkgrey
49 72276 72275 darkgrey
50 111062 111058 darkgrey
51 111062 111059 darkgrey
52 111062 111060 red 15 16
53 111062 111061 darkgrey
54 111074 111070 red 17 18
55 111074 111071 red 19 20
56 111074 111072 darkgrey
57 111074 111073 darkgrey
我想将空的留给 NA(我在上面的 df 中将它们遗漏了)。
我可以使用 which
获取要更新的行的索引:
which(df$color == "red")
[1] 7 23 24 33 37 44 46 52 54 55
我可以根据这个创建两个奇数和偶数序列:
odd <- seq(from = 1, to = 2*length(which(cluster_data_updated_illegal_combined$color == "red")), by = 2)
even <- seq(from = 2, to = 2*length(which(cluster_data_updated_illegal_combined$color == "red")), by = 2)
> odd
[1] 1 3 5 7 9 11 13 15 17 19
> even
[1] 2 4 6 8 10 12 14 16 18 20
但我如何将这些组合起来以添加上面的序号?
先把所有的列都填满NA。
df$f = NA
df$t = NA
然后使用 which 更新必要的行
df$f[which(df$color == "red")] = odd
df$t[which(df$color == "red")] = even
初始化空列后,
df$f <- NA
df$n <- NA
您可以使用尺寸正确的矩阵作为 color=="red"
:
red_matrix <- matrix(1:(length(which(df$color == "red")) *2), ncol = 2, byrow = TRUE )
df[df$color == "red", c("f","n")] <- length_red