r - 如何从特定列中删除(或用 NA 替换)给定值的数据?
问题描述
我正在使用 dN/dS 比率(生物学,对问题并不重要),并且最终在我的数据中出现了一些伪影(特定列中大于 3 的任何东西都可能不可靠或错误),我需要删除这些伪影在我制作直方图之前。
我正在使用导入的 xlxs 文件。其中的一列包含适用的数据。
我试过下面的代码
library(data.table)
outlierReplace = function(dataframe, cols, rows, newValue = NA) {
if (any(rows)) {
set(dataframe, rows, cols, newValue)
}
}
outlierReplace(X23k_Genome_dNdS_For_R,
`manual dN/dS`,
which(X23k_Genome_dNdS_For_R$`manual dN/dS` > 3),
NA)
这返回了错误代码(如下)
Error in set(dataframe, rows, cols, newValue) :
Can't assign to the same column twice in the same query (duplicates detected).
In addition: Warning message:
In set(dataframe, rows, cols, newValue) :
Coerced j from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2
强调一下,我有 23k 行,7 列。我正在尝试将“手动 dN/dS”列中高于 3 的所有值替换为 NA
您可能需要安装 data.table 才能使用 set() 函数
样本数据
dat = data.table("seq1"=c("CAA_0000006-RA", "CAA_0000007-RA"),
"seq2"=c("CAB_00000010-RA", "CAB_00000011-RA"),
"dN/dS"=c(0.4689, 0.1001), "dN"=c(0.0074, 0.0021),
"dS"=c(0.0169,0.0206),
"manual dN/dS"=c(0.4379,0.1019),
"man. dN/dS w/Nas"=c(0.437869822,0.101941748))
解决方案
library(data.table)
setDT(dat)
dat[`manual dN/dS` > 3, `manual dN/dS` := NA]
请注意,您的示例数据不包含您在问题中提到的列。
另请注意,列名中的空格和斜杠等特殊字符是不好的做法,因为您总是必须在 R 代码中“引用”名称。
您可以重命名列名,例如。via data.table::setnames(data, "old name", "new name")
(请参阅此功能的帮助)
推荐阅读
- javascript - 如何从阵列中获取个人 ID 和通过/失败的数量?
- jquery - 如何使用jQuery慢慢向下滚动页面?
- python - 如何在 python 中使用 ctypes 重载 C 库的弱声明函数?
- android - EditText 的高度不会扩展到其父级的高度
- batch-file - 使用具有多个条件的 IF 语句
- javascript - 在 chart.js 条形图中,如何标记类别中的每个条形?
- javascript - Array 算法是否失败?/ 什么是新目标?
- python - 如何从字符串中产生一个字符
- c++ - getch() 函数在输入密钥时什么也不做
- amazon-web-services - AWS 设置建议。EC2 + S3 - 前面的云端?