下面是我的虚拟数据.我希望在至少3(共5)列中只保留值大于或等于5的行.

A <- c(2,4,6,23,8,3)
B <- c(NA,NA,34,5,6,NA)
C <- c(37,21,8, NA, 5,2)
D <- c(12, 67, 12, 4, 11,NA)
E <- c(11, 56, 66, 90, 2,23)
df <- data.frame(A,B,C,D,E)
df
   A  B  C  D  E
1  2 NA 37 12 11
2  4 NA 21 67 56
3  6 34  8 12 66
4 23  5 NA  4 90
5  8  6  5 11  2
6  3 NA  2 NA 23

所以我决定用whichrowsums:

df[which(rowSums(df[, c(1:5)] >= 5) >= 3),]

是什么给了我:

  A  B C  D  E
3 6 34 8 12 66
5 8  6 5 11  2

但是,我希望也考虑到与Nas之间的行,并给出以下结果:

   A  B  C  D  E
1  2 NA 37 12 11
2  4 NA 21 67 56
3  6 34  8 12 66
4 23  5 NA  4 90
5  8  6  5 11  2

换句话说:第1行有1个nA值,但有3个值(剩余4个)&gt;=5,因此满足条件.

我如何修改我的命令来实现这一点?

推荐答案

使用na.rm=TRUE.

> df[which(rowSums(df[, c(1:5)] >= 5, na.rm=TRUE) >= 3),]
   A  B  C  D  E
1  2 NA 37 12 11
2  4 NA 21 67 56
3  6 34  8 12 66
4 23  5 NA  4 90
5  8  6  5 11  2

你现在可以不用which了,因为不再抛NA了.

> df[rowSums(df[, c(1:5)] >= 5, na.rm=TRUE) >= 3,]
   A  B  C  D  E
1  2 NA 37 12 11
2  4 NA 21 67 56
3  6 34  8 12 66
4 23  5 NA  4 90
5  8  6  5 11  2

Data:

> dput(df)
structure(list(A = c(2, 4, 6, 23, 8, 3), B = c(NA, NA, 34, 5, 
6, NA), C = c(37, 21, 8, NA, 5, 2), D = c(12, 67, 12, 4, 11, 
NA), E = c(11, 56, 66, 90, 2, 23)), class = "data.frame", row.names = c(NA, 
-6L))

R相关问答推荐

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

R创建一个数据透视表,计算多个组的百分比

r中的stat_difference函数不起作用

当月份额减go 当月份额

如何在Chart_Series()中更改轴值的 colored颜色 ?

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

在df中保留原始变量和新变量

在ggplot中为不同几何体使用不同的 colored颜色 比例

如何从R ggplot图片中获取SVG字符串?

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

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

计算两列中满足特定条件连续行之间的平均值

如何将一列中的值拆分到R中各自的列中

如何将一些单元格的内容随机 Select 到一个数据框中?

在点图上绘制置信度或预测区间ggplot2

使用shiny 中的所选要素行下拉菜单

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

变异以按组从其他列创建具有最大和最小值的新列

从矩阵创建系数图

在子图内和子图之间对齐行数不均匀的表格罗布对