R dplyr过滤值大于+N且小于-N的数据: abs() function?

标签 r dplyr

我正在 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/

相关文章:

r - 在 dplyr 中插入样条

R 规则,仅我的规则来自特定列

R argparse : Line breaks in description

r - 将上三角矩阵转换为R中的对称矩阵

r - 在 dplyr 分组后将误差线添加到 ggplot2 条形图

r - 汇总时间序列的多个组内的数据

r - 错误: Data source must be a dictionary (dplyr)

r - 在函数中使用 dplyr group_by

r - 避免在 R 中覆盖文本文件

r - 如何为 r 中两个数据帧之间的匹配观察分配相同的唯一 ID?