我有这种类型的数据:
set.seed(123)
df <- data.frame(
v1 = sample(LETTERS[1:10], 5),
v2 = sample(LETTERS[1:10], 5),
v3 = sample(LETTERS[1:10], 5),
v4 = sample(LETTERS[1:10], 5)
)
以及一些key
words:
keys <- c("A", "C", "F", "H")
我想 (i) 检测哪个key
单词出现在每一列中df
(ii) 为每个创建新列key
s,记录用1
if that key
存在。我一直在使用for
到目前为止,循环,但是不起作用:
library(stringr)
for(i in keys){
df[i] <- +str_detect(apply(df, 1, paste0, collapse = " "), keys[i])
}
df
v1 v2 v3 v4 A C F H
1 C A J I NA NA NA NA
2 H E E C NA NA NA NA
3 D H F A NA NA NA NA
4 G D I J NA NA NA NA
5 F C A F NA NA NA NA
我不知道为什么它不起作用,因为同样的逻辑适用于单个key
确实有效:
+str_detect(apply(df, 1, paste0, collapse = " "), keys[1])
[1] 1 0 1 0 1
我将不胜感激关于如何for
必须调整循环,但也必须对问题采取完全不同的解决方案(例如,dplyr
).