我的数据如下:

1 0 1234
1 0 1235
1 0 5434
2 1 31212
2 1 3212
2 0 1211
3 0 2212
3 0 2212
3 1 1212


我想使用R完成的操作是生成一个新列,如果第二列中三个值(都属于一起)中的至少一个具有1,则该列的值为1。因此,我的新列将是像:

1 0 1234 0
1 0 1235 0
1 0 5434 0
2 1 31212 1
2 1 3212 1
2 0 1211 1
3 0 2212 1
3 0 2212 1
3 1 1212 1


由于每三行都属于同一行,因此我无法弄清楚如何完成此操作。有人可以帮我吗?

最佳答案

您可以在第一列(在我的情况下为V1)中使用dplyrgroup_by,然后使用any检查是否有任何值等于1。

library(dplyr)
df %>%
   group_by(V1) %>%
   mutate(new = ifelse(any(V2) == 1, 1, 0))

#Source: local data frame [9 x 4]
#Groups: V1 [3]

#     V1    V2    V3   new
#  <int> <int> <int> <dbl>
#1     1     0  1234     0
#2     1     0  1235     0
#3     1     0  5434     0
#4     2     1 31212     1
#5     2     1  3212     1
#6     2     0  1211     1
#7     3     0  2212     1
#8     3     0  2212     1
#9     3     1  1212     1

09-30 19:22