首页 > 解决方案 > 选择具有不同 rowSums 条件的行

问题描述

我正在尝试从 df 中选择创建一个新的 df 'Z',其中对于第 9、10、11、1、2、4、5 列,NA 少于 3,对于第 3、6、7 列, 8,12,13,14 正好有 7 个 NA。我正在使用此代码

Z <- df[c(rowSums(is.na(df[, c(9:11,1,2,4,5)]) < 3)) & (rowSums(is.na(df[, c(6:8,12:14,3)]) == 7)),]

但是,作为输出,我得到一个只有 14 个列名的空 df。我究竟做错了什么?

标签: r

解决方案


你只是在错误的地方放了一些牙套

df[rowSums(is.na(df[, c(9:11,1,2,4,5)])) < 3 & rowSums(is.na(df[, c(6:8,12:14,3)])) == 7,]

为了帮助您在调试时让您的代码更清晰,请尝试通过缩进或间隔代码跨行分布 - 这就是我写的

df[
  rowSums( is.na( df[, c(9:11, 1, 2, 4, 5)] ) ) <  3 & 
  rowSums( is.na( df[,    c(6:8, 12:14, 3)] ) ) == 7, ]

与您的相比,间距有助于显示错误

df[
  c(
     rowSums( is.na( df[, c(9:11, 1, 2, 4, 5)] ) <  3 ) ) & 
    (rowSums( is.na( df[,    c(6:8, 12:14, 3)] ) == 7 ) ), ]

测试使用

df <- data.frame(NA,2,NA,4,5,NA,NA,NA,9,10,11,NA,NA,NA)

推荐阅读