在每个ID中重复一个值

时间:2018-09-17 20:36:57

标签: r

我有一个R格式的长数据集。每个ID出现的次数不同(即,一个ID可能显示一行,另一个ID可能显示79行)。

例如

ID      V1       V2    
1       B        0    
1       A        1    
1       C        0   
2       C        0    
3       A        0    
3       C        0

我想创建一个变量,如果给定ID的任何行中有Var2 == 1,则该ID的每一行都重复1

例如

ID      V1       V2       V3    
1       B        0        1    
1       A        1        1    
1       C        0        1    
2       C        0        0    
3       A        0        0           
3       C        0        0

3 个答案:

答案 0 :(得分:2)

base R中,我们可以使用any-和ave进行分组。

DF$V3 <- with(DF, ave(V2, ID, FUN = function(x) any(x == 1)))
DF
#  ID V1 V2 V3
#1  1  B  0  1
#2  1  A  1  1
#3  1  C  0  1
#4  2  C  0  0
#5  3  A  0  0
#6  3  C  0  0

数据

DF <- structure(list(ID = c(1L, 1L, 1L, 2L, 3L, 3L), V1 = c("B", "A", 
"C", "C", "A", "C"), V2 = c(0L, 1L, 0L, 0L, 0L, 0L)), .Names = c("ID", 
"V1", "V2"), class = "data.frame", row.names = c(NA, -6L))

答案 1 :(得分:1)

这是一个dtype=np.float解决方案。

如果tidyverse只能为0或1:

V2

如果要检查library(dplyr) df %>% group_by(ID) %>% mutate(V3 = max(V2)) 是否正好为1。

V2

答案 2 :(得分:0)

另一个base R选项是

df$V3 <- with(df,  +(ID %in% which(rowsum(V2, ID) > 0)))