如何解决省略许多特定列中带有0的行
我有一个非常广泛的数据集,具有多个心理量表,如果少数列的任何包含零(即缺少响应),我想删除行。
我知道当数据帧较小时该怎么做,但是我的方法不可扩展。例如,
dftry <- data.frame(x = c(1,2,5,3,0),y = c(0,10,37),z=c(12,33,22,23))
x y z
1 1 0 12
2 2 10 0
3 5 5 33
4 3 3 22
5 0 37 23
# Remove row if it has 0 in y or z columns
# is there a difference between & and,?
dftry %>% filter(dftry$y > 0 & dftry$z > 0)
x y z
1 5 5 33
2 3 3 22
3 0 37 23
# this is the most succinct way of selecting the columns in question
select(c(1:42,contains("BMIS"),"hamD","GAD"))
解决方法
您可以使用rowSums
:
cols <- c('y','z')
dftry[rowSums(dftry[cols] == 0,na.rm = TRUE) == 0,]
# x y z
#1 5 5 33
#2 3 3 22
#3 0 37 23
我们可以根据您的实际使用情况将其集成到dplyr
中。
library(dplyr)
dftry %>%
filter(rowSums(select(.,c(1:42,contains("BMIS"),"hamD","GAD")) == 0,na.rm = TRUE) == 0)
,
使用dplyr进行这项工作吗?
> library(dplyr)
> dftry
x y z a b c BMIS_1 BMIS_3 hamD GAD m n
1 1 0 12 1 0 12 1 0 12 12 12 12
2 2 10 0 2 10 0 2 10 0 0 0 0
3 5 5 33 5 5 33 5 5 33 33 33 33
4 3 3 22 3 3 22 3 3 22 22 22 22
5 0 37 23 0 37 23 0 37 23 23 23 23
> dftry %>% select(c(1:3,contains('BMIS'),hamD,GAD)) %>% filter_all(all_vars(. != 0))
x y z BMIS_1 BMIS_3 hamD GAD
1 5 5 33 5 5 33 33
2 3 3 22 3 3 22 22
>
使用的数据:
> dftry
x y z a b c BMIS_1 BMIS_3 hamD GAD m n
1 1 0 12 1 0 12 1 0 12 12 12 12
2 2 10 0 2 10 0 2 10 0 0 0 0
3 5 5 33 5 5 33 5 5 33 33 33 33
4 3 3 22 3 3 22 3 3 22 22 22 22
5 0 37 23 0 37 23 0 37 23 23 23 23
> dput(dftry)
structure(list(x = c(1,2,5,3,0),y = c(0,10,37),z = c(12,33,22,23),a = c(1,b = c(0,c = c(12,BMIS_1 = c(1,BMIS_3 = c(0,hamD = c(12,GAD = c(12,m = c(12,n = c(12,23)),class = "data.frame",row.names = c(NA,-5L))
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。