[英]R - How to add sequential columns to dataframe on conditional?
I have a dataframe:我有一个数据框:
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
I want to add two other columns which are sequential numbers, separated into a set of odd and even numbers, to this dataframe like this:我想向这个数据帧添加另外两列,它们是序列号,分为一组奇数和偶数,如下所示:
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
I'd like to leave the empty ones with NA (I've left them out in the above df).我想用 NA 留下空的(我在上面的 df 中将它们排除在外)。
I can use which
to get the index of the rows which I want to update:我可以使用
which
来获取要更新的行的索引:
which(df$color == "red")
[1] 7 23 24 33 37 44 46 52 54 55
And I can create two odd and even sequences based on this:我可以基于此创建两个奇数和偶数序列:
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
But how do I combine these to add the sequential numbers above?但是我如何组合这些来添加上面的序列号?
First fill up the columns with NA all the way.首先用 NA 填充列。
df$f = NA
df$t = NA
Then use the which to update the necessary rows然后使用 which 来更新必要的行
df$f[which(df$color == "red")] = odd
df$t[which(df$color == "red")] = even
After initializing the empty columns,初始化空列后,
df$f <- NA
df$n <- NA
You could use a matrix with the correct dimensions as a mask for the two columns where color=="red"
:您可以使用具有正确尺寸的矩阵作为
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.