data.table:在我使用.SD

时间:2019-07-18 09:00:42

标签: r data.table

我有我的data.table DT,我想过滤并仅保留该行中任何值包含字符串“ tokeep”的行。

library(data.table)     
cola <- c(1:5)
colb <- c(letters[1:4], "tokeep")
dt <- data.table(cola, colb)
dt
   cola   colb
1:    1      a
2:    2      b
3:    3      c
4:    4      d
5:    5 tokeep

预期结果:

 dt[grepl("tokeep", colb)]
   cola   colb
1:    5 tokeep

但是我不知道将在哪个列中找到。我尝试像这样在.SD中使用i

 dt[any(grepl("tokeep", .SD))]
Empty data.table (0 rows) of 2 cols: cola,colb

此外,无法弄清楚以下内容。

> dt[,print(any(grepl("tokeep", .SD)))]
[1] TRUE
[1] TRUE

是不是FALSE, TRUE,因为"tokeep"仅存在于colb中?

1 个答案:

答案 0 :(得分:0)

在阅读this post之后,我认为这可能是一种简洁明了的数据,是将函数应用于data.table的所有行的理想方法。对其他命题感兴趣。

> dt[dt[, any(grepl("tokeep", .SD)), by = seq_len(nrow(dt))]$V1]
   cola   colb
1:    5 tokeep