关于删除包含NA和drop_na()的行有各种问题,但我还没有找到解决我的特定需求的问题.我想删除行中包含NA的每一个3个特定的列.在这种情况下,删除value2value3value4中包含NA的行,但不删除少于这三个列或任何其他列中包含NA的行.

sample <- c("sample1", "sample2", "sample3", "sample4", "sample5")
value1<- c("A", "B", "A", NA, "C")
value2 <- c(NA, 5, 7, NA, NA)
value3 <- c(13, NA, 7, NA, NA)
value4 <- c(11, 4, NA, 9, NA)
myinput <- data.frame(sample, value1, value2, value3, value4)

myinput
   sample value1 value2 value3 value4
1 sample1      A     NA     13     11
2 sample2      B      5     NA      4
3 sample3      A      7      7     NA
4 sample4     NA     NA     NA      9
5 sample5      C     NA     NA     NA

请注意,情况并非如此.

   sample value1 value2 value3 value4
1 sample1      A     NA     13     11
2 sample2      B      5     NA      4
3 sample3      A      7      7     NA
4 sample4     NA     NA     NA      9

谢谢!

推荐答案

collapse::na_omit的另一种方式:

collapse::na_omit(myinput, cols = paste0("value", 2:4), prop = 1)

#>    sample value1 value2 value3 value4
#> 1 sample1      A     NA     13     11
#> 2 sample2      B      5     NA      4
#> 3 sample3      A      7      7     NA
#> 4 sample4   <NA>     NA     NA      9

Benchmark on a 1,000,000 x 21 data set:

collapse的速度要快5倍-6倍:

#Using data from https://stackoverflow.com/a/48830183/13460602
library(dplyr)
library(collapse)

mb <- microbenchmark::microbenchmark(
  rowSums = df[rowSums(is.na(df[, 2:21])) < 3,],
  "dplyr+rowSums" = df %>%
    filter(rowSums(is.na(pick(2:21))) < 3),
  if_all = df |>
    filter(!if_all(2:21, is.na)),
  collapse = na_omit(df, cols = 2:21, prop = 1)
)

enter image description here

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

R:连接值,而不是变量?

从开始时间和结束时间导出时间

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

在GGPLATE中将突出的点放在前面

提取具有连续零值的行,如果它们前面有R中的有效值

如何同时从多个列表中获取名字?

2个Rscript.exe可执行文件有什么区别?

根据列A中的差异变异列,其中行由列B中的相对值标识

在R函数中使用加号

从多面条形图中删除可变部分

我如何使用循环来编写冗余的Rmarkdown脚本?

在ggplot2上从多个数据框创建复杂的自定义图形

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

附加中缀操作符

将边列表转换为路径长度列表

把代码写成dplyr中的group_by/摘要更简洁吗?

我有2011-2022年的年度数据.如何计算最低年份和最高年份之间的差额?

如何根据顺序/序列从数据框中排除值

如何在给定的环境中找到函数的函数参数?