我正在寻找一种简单的方法,将至少有一个NA值的所有行移动到数据框/数据表底部。例如:
> df <- data.table(aaa=c(1,2,3,4,NA,6,7),
bbb=c(1,9,5,NA,3,NA,9),
ccc=c(NA,3,NA,4,8,NA,2)
)
> df
aaa bbb ccc
1: 1 1 NA
2: 2 9 3
3: 3 5 NA
4: 4 NA 4
5: NA 3 8
6: 6 NA NA
7: 7 9 2
将会变成这样:
> df2 <- moveNAtoBottom(df)
> df2
aaa bbb ccc
1: 2 9 3
2: 7 9 2
3: 1 1 NA
4: 3 5 NA
5: 4 NA 4
6: NA 3 8
7: 6 NA NA
即所有没有NA值的列都在顶部。
注:
- 目前,我不在意是否对行应用任何排序,或者是否保持或反转顺序……只要表格现在分为两个部分,顶部没有NAs,底部有NAs
- 这可以是数据框或数据表
- 依赖项是可以接受的
更好的方法是,如果我能够指定搜索NA的列。例如,仍然使用上一个示例:
> df3 <- moveNAtoBottom(df, applyTo = c("bbb", "ccc"))
> df3
aaa bbb ccc
1: 2 9 3
2: NA 3 8
3: 7 9 2
4: 1 1 NA
5: 3 5 NA
6: 4 NA 4
7: 6 NA NA
谢谢
dplyr
的问题吗?为什么它需要使用管道符才能正常工作?如果它们与magrittr
的管道符以相同的方式工作,那么人们可能会认为arrange(rowSums(is.na(select_(df, 'bbb:ccc'))))
也能正常工作,不是吗? - François M.arrange(df, rowSums(is.na(select_(df, 'bbb:ccc'))))
。 - Steven Beaupré