2017-12-27 130 views
0

我有这样一个数据帧:检查通过使用列表中如果长期存在

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)) 

回答

2

的1

的值,例如我们可以用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 
0

下面是一个使用do.call粘贴栏,然后使用grepl检测您mylist单词的矢量化的方式,即

as.integer(grepl(paste(mylist, collapse = '|'), do.call(paste, df[-1]))) 
#[1] 1 1 0 
相关问题