删除所有列中值均低于阈值的行

时间:2020-08-21 15:27:41

标签: r tidyverse

我有一个数据框,该数据框由15,000行和350列(其中1列包含字符串,其余为所有数字)组成,我想在其中删除所有整数列中包含低于特定数字的数字的行。

示例数据:

df1 <- data.frame(
 ID = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5"),
              var1 = c(245, 2, 0.4, 34,1098),
              var2 = c(908, 1, 54, 34,856),
              var3 = c(0, 3, 650, 0,6)
)

threshold <- 3
> df1
 ID   var1 var2 var3
1 Gene1  245.0  908    0
2 Gene2    2.0    1    3
3 Gene3    0.4   54  650
4 Gene4   34.0   34    0
5 Gene5 1098.0  856    6

所需的输出:

> df1
     ID   var1 var2 var3
1 Gene1  245.0  908    0
3 Gene3    0.4   54  650
4 Gene4   34.0   34    0
5 Gene5 1098.0  856    6

Gene2(所有列中的数字都低于3)已消失。我该如何实现?谢谢!

2 个答案:

答案 0 :(得分:1)

接下来是一种public static async Task ProcessBatch(Batch batch) { await ssisMethod(batch).ConfigureAwait(false); await CreateAndSendReports(batch).ConfigureAwait(false); } while(moreToProcess()) { var batch = CreateBatch(); ProcessBatch(batch).ConfigureAwait(false); //Program will not wait here, it will proceed to create another batch. } 的方法(但是@Onyambu非常理想):

tidyverse

输出:

library(tidyverse)

#Data
df1 <- data.frame(
  ID = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5"),
  var1 = c(245, 2, 0.4, 34,1098),
  var2 = c(908, 1, 54, 34,856),
  var3 = c(0, 3, 650, 0,6)
)

threshold <- 3

#Code
df1 %>% pivot_longer(-ID) %>% group_by(ID) %>%
  mutate(Flag=sum(value<=3)) %>%
  filter(Flag!=3) %>% select(-c(Flag)) %>%
  pivot_wider(names_from = name, values_from=value)

答案 1 :(得分:1)

尝试一下:

> library(dplyr)

> df1 %>% filter_all(any_vars(is.numeric(.) & . > 3))

     ID   var1 var2 var3
1 Gene1  245.0  908    0
2 Gene3    0.4   54  650
3 Gene4   34.0   34    0
4 Gene5 1098.0  856    6