我正在使用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列。我试图用NA替换“ manual dN / dS”列中所有高于3的值
您可能需要安装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))
答案 0 :(得分:1)
library(data.table)
setDT(dat)
dat[`manual dN/dS` > 3, `manual dN/dS` := NA]
请注意,示例数据不不包含您在问题中提到的列。
还请注意,列名中的空格和特殊字符(例如斜杠)是不正确的做法,因为您总是必须在R代码中“引用”这些名称。
您可以重命名列名称,例如。通过data.table::setnames(data, "old name", "new name")
(请参阅此功能的帮助)