首页 > 解决方案 > 如何删除R中的特定行?

问题描述

我正在使用的数据集如下:

    C1  C2  C3  R1
R1  NA  NA  NA   5 
R2  NA  NA  0.4  7
R3  0.1     NA   6
R4  NA  NA  NA   2 

从数据框中,我想删除包含从 C1 到 C3 大于零的数字的行。

最终结果必须是:

    C1  C2  C3  R1
R1  NA  NA  NA   5
R4  NA  NA  NA   2 

我试过:

df<- df %>% filter_at(vars('C1' : 'C2`), all_vars(. > 0))

但我对此有误。我该如何解决?

从 Excel 导入: 在此处输入图像描述

写在R中: 在此处输入图像描述

标签: r

解决方案


您可以rowSums在基础 R 中使用:

cols <- paste0('C', 1:3)  
df[rowSums(df[cols] > 0, na.rm = TRUE) == 0, ]

或使用filter_at

library(dplyr)
df %>% filter_at(vars(C1:C3), all_vars(. <= 0 | is.na(.)))

#   C1 C2 C3 R1
#R1 NA NA NA  5
#R4 NA NA NA  2

并且filter_at已被弃用,因此您可以将其编写across为:

df %>% filter(across(C1:C3, ~. <= 0 | is.na(.)))

数据

df <- structure(list(C1 = c(NA, NA, 0.1, NA), C2 = c(NA, NA, NA, NA
), C3 = c(NA, 0.4, NA, NA), R1 = c(5L, 7L, 6L, 2L)), 
class = "data.frame", row.names = c("R1", "R2", "R3", "R4"))

推荐阅读