我正在 R 中使用 dplyr 包来过滤我的基因表达数据。我已经计算了倍数变化,并希望过滤其中至少一个样本(列)的值大于 +0.584963 或小于 -0.584963 的基因(行)。示例数据:
X SAMPLE_1_FC SAMPLE_2_FC SAMPLE_3_FC SAMPLE_4_FC SAMPLE_5_FC
GENE_1 0.6780 0.4050 0.8870 0.3300 0.2230
GENE_2 0.2340 -0.6670 0.0020 0.1240 0.3560
GENE_3 0.0170 0.1560 0.1120 0.0080 -0.1230
GENE_4 -0.0944 -0.1372 -0.1800 -0.2228 -0.2656
GENE_5 -0.8080 -0.7800 -0.5560 0.0340 0.4450
GENE_6 0.2091 0.1106 0.0121 -0.0864 -0.1849
GENE_7 0.5980 0.7680 0.9970 0.4670 -0.7760
我当前正在使用以下脚本
det.cols<- colnames(my.data)[which(grepl("fc",tolower(colnames(my.data))))]
filt <- gsub(","," | ",toString(paste("`",det.cols,"`",">abs(0.584963)", sep = "")))
my.datasub<- my.data %>% filter_(filt)
但这仅返回大于 +0.584963 的基因,而不返回负的基因。在本例中,我想要的是包含基因 1、2、5 和 7 的子集列表。但它只给了我基因 1 和 7。我该如何改变这一点?
我希望答案采用以下格式:
X SAMPLE_1_FC SAMPLE_2_FC SAMPLE_3_FC SAMPLE_4_FC SAMPLE_5_FC
GENE_1 0.6780 0.4050 0.8870 0.3300 0.2230
GENE_2 0.2340 -0.6670 0.0020 0.1240 0.3560
GENE_5 -0.8080 -0.7800 -0.5560 0.0340 0.4450
GENE_7 0.5980 0.7680 0.9970 0.4670 -0.7760
谢谢。
最佳答案
长话短说,您的代码中的 abs()
位于错误的位置。
我在这里修复了它:
det.cols<- colnames(my.data)[which(grepl("fc",tolower(colnames(my.data))))]
filt <- gsub(","," | ",toString(paste("abs(`",det.cols,"`)",">0.584963", sep = "")))
my.datasub<- my.data %>% filter_(filt)
为了进一步提高灵活性,@ha_pu 提供了一个很棒的 filter_at
解决方案,该解决方案基于我之前的解决方案(在我发现代码中的错误之前)。
关于R dplyr过滤值大于+N且小于-N的数据: abs() function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920159/