我有一个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
答案 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)))