我有一个数据框:
adc
我想使所有这些列(加上第一列,基因)都具有大于或等于至少2个有效值(即不是NA)。我该怎么做?
我在想这样的事情...
df = data.frame(gene = c("a", "b", "c", "d", "e"),
value1 = c(NA, NA, NA, 2, 1),
value2 = c(NA, 1, 2, 3, 4),
value3 = c(NA, NA, NA, NA, 1))
谢谢
答案 0 :(得分:4)
我们可以sum
的非NA元素并创建逻辑条件以select
感兴趣的列
library(dplyr)
df1 <- df %>%
select_if(~ sum(!is.na(.)) > 2)
df1
# gene value2
#1 a NA
#2 b 1
#3 c 2
#4 d 3
#5 e 4
或者另一个选择是keep
library(purrr)
keep(df, ~ sum(!is.na(.x)) > 2)
或根据行数创建条件
df %>%
select_if(~ mean(!is.na(.)) > 0.5)
或使用Filter
中的base R
Filter(function(x) sum(!is.na(x)) > 2, df)
答案 1 :(得分:2)
我们可以在基数R中使用colSums
来计算每列的非NA值
df[colSums(!is.na(df)) > 2]
# gene value2
#1 a NA
#2 b 1
#3 c 2
#4 d 3
#5 e 4
或使用apply
df[apply(!is.na(df), 2, sum) > 2]