一个能够使用dplyr过滤行filter,但条件通常基于每行的特定列,例如
d <- data.frame(x=c(1,2,NA),y=c(3,NA,NA),z=c(NA,4,5))
d %>% filter(!is.na(y))
Run Code Online (Sandbox Code Playgroud)
我想根据NA的数量是否大于50%来过滤行,例如
d %>% filter(mean(is.na(EACHROW)) < 0.5 )
Run Code Online (Sandbox Code Playgroud)
我如何以dplyr/magrittr流方式执行此操作?
你可以使用rowSums或rowMeans为此.提供数据的示例:
> d
x y z
1 1 3 NA
2 2 NA 4
3 NA NA 5
# with rowSums:
d %>% filter(rowSums(is.na(.))/ncol(.) < 0.5)
# with rowMeans:
d %>% filter(rowMeans(is.na(.)) < 0.5)
Run Code Online (Sandbox Code Playgroud)
两者都给:
x y z
1 1 3 NA
2 2 NA 4
Run Code Online (Sandbox Code Playgroud)
如您所见,从数据中删除了第3行.
在基地R,您可以这样做:
d[rowMeans(is.na(d)) < 0.5,]
Run Code Online (Sandbox Code Playgroud)
得到相同的结果.