我有一个这样的数据框:
df <-data.frame(id = c(1,2,3), stock_1 = c("Google","Microsoft","Yahoo"), stock_2 = c("Yahoo","Gg","NA"))
有了这个我知道以下是同一组:
mylist <- c("Google", "Gg")
使用前面的列表如何在所有行中运行mylist并分别使用1或0检查是否存在。如果该值在同一行中超过一次,则再次采用1。
输出示例
df <-data.frame(id = c(1,2,3), stock_1 = c("Google","Microsoft","Yahoo"), stock_2 = c("Yahoo","Gg","NA"), mylist = c(1,1,0))
答案 0 :(得分:2)
我们可以使用apply
函数迭代df
行:
apply(df, 1, function(x) max(x %in% mylist))
# 1 1 0
我们可以将此函数的结果存储在新列中:
df$mylist <- apply(df, 1, function(x) max(x %in% mylist))
# id stock_1 stock_2 mylist
# 1 1 Google Yahoo 1
# 2 2 Microsoft Gg 1
# 3 3 Yahoo NA 0
答案 1 :(得分:0)
以下是使用do.call
粘贴列,然后使用grepl
检测mylist
中的字词的矢量化方式,即
as.integer(grepl(paste(mylist, collapse = '|'), do.call(paste, df[-1])))
#[1] 1 1 0