【发布时间】:2019-02-15 05:29:43
【问题描述】:
我正在使用 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 替换“手动 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))
【问题讨论】:
-
请考虑发布代码和示例数据,以便更容易理解问题,并更容易(希望尝试回答的人更轻松)提供可能的解决方案。
-
我补充了一些信息,希望对您有所帮助。
-
好的,还有两个问题。 (1)
set()来自哪个 R 包? (2) 您能否制作一个非常小的示例数据集,我们可以使用它来运行您的函数并重现相同的错误消息?它可能应该具有您在函数调用中引用的相同的列名和行名。类似于dat = data.frame("Fruit Type"=c("apple", "banana"), "Fruit Color"=c("red", "yellow"), "Length_cm"=c(8, 20))。 -
我添加了所需的包(我相信)和数据样本。
-
我将提供一个更简单的建议解决方案,而不是尝试对您的功能进行故障排除。
dat[`manual dN/dS` > 0.4, `manual dN/dS`:=NA_real_]。展望未来,我强烈建议重命名您的列,不要使用空格、斜杠、加号等。
标签: r data.table