r - 有没有办法在 R 中使用 is.na 和列号引用?
问题描述
我正在生物信息学中构建一个 R 包,并且我有一个数据表,其中一个列名是可变的,它将基于输入的基因组数据。我有一条带条件的行,我需要两个条件:一行中的一列是 NA,另一列大于用户将给出的某个数字。
我尝试将 is.na() 与 mergeframe_dt[,2] 之类的东西一起使用,我在其中指定列 # 而不是典型的列名。
通常,这样的事情会起作用:
mergeframe_dt[is.na(new)&Reads>5, new := factor(0)]
但问题是“新”列名是可变的,在每种情况下都会有所不同。在我的代码前面,我基本上将其设置为用户输入的基因组文件的名称。
理想情况下,我想要像这样工作的东西,它检查数据表 mergeframe_dt 的第二列是否为 NA 以及“读取”列是否大于 5。
mergeframe_dt<-as.data.table(mergeframe)
mergeframe_dt[is.na(mergeframe_dt[,2])&Reads>5, new := factor(0)]
我也试过这个,但也没有用:
mergeframe_dt[is.na(mergeframe_dt$(colnames(mergeframe_dt)[2]))&Reads>5, new := factor(0)]
错误: 示例 1:
Error in `[.data.table`(mergeframe_dt, is.na(mergeframe_dt[, 2]) & Reads > :
i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report to data.table issue tracker if you'd like this, or add your comments to FR #657.
示例 2:
Error: unexpected '(' in "mergeframe_dt[is.na(mergeframe_dt$("
解决方案
仅使用 base R 你可以做这样的事情:
library(data.table)
DT <- data.table(var = as.factor(c(1, NA, NA, 2)),
Reads = 4:7)
new <- "var"
expr <- substitute(DT[is.na(var_name) & Reads > 5, var_name := factor(0)],
list(var_name = as.name(new)))
eval(expr)
print(DT)
var Reads
1: 1 4
2: <NA> 5
3: 0 6
4: 2 7
推荐阅读
- php - 通过 PHP 将文件从网站上传到 Amazon EC2 服务器
- javascript - CRM 2011 javascript获取子实体ID(1:N关系)
- spring-boot - FileAppender 的 Spring Boot 日志记录设置 - 它在哪里使用 max-size 属性?
- mongodb - 如何使用 join 在 MongoDB 数据库中查找数据?
- docker - Composer 在 Docker 中失败“无法启用加密”
- javascript - 当代理并行发布的消息过多时,Node JS 客户端不接收 MQTT 消息
- c# - 引用以下命令行的正确方法
- python - 如何使用python对相同颜色的图像区域进行分组并获取其坐标而忽略背景颜色
- sql - 如何将数据分成两列
- assembly - 组装 - 无法使用 lldb 为 macOS 上的组装文件设置断点