如果存在术语,请检查列表的使用情况

时间:2017-12-27 15:02:57

标签: r

我有一个这样的数据框:

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 个答案:

答案 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