我有一個數據幀的結構是這樣的測試:R:通過組,如果對於一個變量的每一個值,該值存在於另一個可變
a <- c(1,1,1,2,2,2,3,3,3,3,4,4)
b <- c(1,2,3,1,2,3,1,2,3,4,1,2)
c <- c(NA, NA, 2, NA, 1, 1, NA, NA, 1, 1, NA, NA)
df <- data.frame(a,b,c)
凡a
和b
唯一標識的觀察。我想要創建一個新變量d
,它指示b
的每個觀察值是否在c
中至少存在一次,如a
分組。這樣d
是:
[1] 0 1 0 1 0 0 1 0 0 0 0 0
我可以寫一個for循環,這將這樣的伎倆,
attach(df)
for (i in unique(a)) {
for (j in b[a == i]) {
df$d[a == i & b == j] <- ifelse(j %in% c[a == i], 1, 0)
}
}
但肯定R中必須有實現相同的結果的清潔劑/更快的方法?
這是'+'轉換邏輯向量的有趣用法。 – thelatemail
所有功勞歸於@Frank。 FWIW基本上與'as.logical'一樣快。 – MichaelChirico
您可以包含'dplyr'版本以及'df%>%group_by(a)%>%mutate(d = +(b%in%c))' – akrun