r - data.table:在 i 中使用 .SD
问题描述
我有我的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
但是我不知道会在哪个列中找到 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
?
解决方案
阅读完这篇文章后,我认为这可能是一种将函数应用于 data.table 的所有行的简洁、更多的 data.table 方式。对任何其他提议感兴趣。
> dt[dt[, any(grepl("tokeep", .SD)), by = seq_len(nrow(dt))]$V1]
cola colb
1: 5 tokeep
推荐阅读
- python - AWS m6g 实例上的 python
- linux - 已禁用在 ACMEv1 上创建 Amazon EC2 Linux SSL certbot-auto 账户。ACMEv2 / RFC 8555. Amazon EC2 Linux SSL certbot-auto
- php - 将 woocommerce 默认页面设置为订单而不是新仪表板
- python - Django 消息未显示在联系表单模板上
- c++ - 在函数结束后使用指向变量的指针是否安全?
- generics - 使用泛型函数制作盒装特征会返回错误
- r - 如何根据两个条件从数据集中检索值并附加到另一个数据集
- windows - Windows Server - 有没有办法通过特定程序获取一段时间内的 CPU 使用情况?
- node.js - Intellisence 在 Node.js 的 Visual Studio 代码中不起作用
- java - 我的用于比较两个区域 id 时间的 java 程序显示错误