R 如何从特定列中删除(或替换为NA)给定值上的数据?

R 如何从特定列中删除(或替换为NA)给定值上的数据?,r,data.table,R,Data.table,我正在处理dN/dS比率(生物学,对这个问题不重要),结果我的数据中出现了一些伪影(某个特定列中大于3的内容可能不可靠或错误),我需要在制作直方图之前删除这些伪影 我正在使用导入的xlxs文件。其中一列包含适用的数据 我尝试了以下代码 library(data.table) outlierReplace = function(dataframe, cols, rows, newValue = NA) { if (any(rows)) { set(datafram

我正在处理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)
这返回了错误代码(如下所示)

要强调的是,我有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))
请注意,您的示例数据不包含您在问题中提到的列

还请注意,列名中的空格和特殊字符(如斜杠)是不好的做法,因为您必须在R代码中始终“引用”名称


您可以通过<代码>数据DATABLE重命名。表::StEnname(数据,“旧名称”,“新名称”)< /代码>(参见此函数的帮助)< /P>请考虑发布代码和示例数据,以便更容易理解该问题,并且更容易(对于想回答的人来说,付出更少的努力)。提供可能的解决方案。我补充了一些信息,希望能有所帮助。好的,还有两个问题。(1)

set()
来自哪个R包?(2) 您能否制作一个非常小的示例数据集,我们可以使用它来运行您的函数并重现相同的错误消息?它可能应该与您在函数调用中引用的列和行名称相同。类似于
dat=data.frame(“水果类型”=c(“苹果”、“香蕉”),“水果颜色”=c(“红色”、“黄色”),“长度”=c(8,20))
。我添加了所需的包(我相信)和数据示例。我将提供一个更简单的解决方案,而不是尝试对函数进行故障排除<代码>dat[`manual dN/dS`>0.4,`manual dN/dS`:=NA\u real\uu]。接下来,我强烈建议您重命名不带空格、斜杠和符号的列。
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]