【发布时间】:2014-09-16 12:39:30
【问题描述】:
我有这样一个数据框:
df <- structure(list(a = c(NA, NA, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), b = c(NA, NA, NA, 1L, 2L, 3L, 4L, 5L, 6L, 7L), d = c(NA, NA, NA, NA, 1L, 2L, 3L, 4L, 5L, 6L)), .Names = c("a", "b", "d"), row.names = c(NA, -10L), class = "data.frame")
> df
a b d
1 NA NA NA
2 NA NA NA
3 1 NA NA
4 2 1 NA
5 3 2 1
6 4 3 2
7 5 4 3
8 6 5 4
9 7 6 5
10 8 7 6
在每一列中,我想将非NA 值移到开头,并将NAs 移到末尾:
> df.out
a b d
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 NA
8 8 NA NA
9 NA NA NA
10 NA NA NA
更新以使我的问题更清晰..
df <- structure(list(a = c(NA, NA, 1, 5, 34, 7, 3, 5, 8, 4), b = c(NA,
NA, NA, 57, 2, 7, 9, 5, 12, 100), d = c(NA, NA, NA, NA, 5, 7,
2, 8, 2, 5)), .Names = c("a", "b", "d"), row.names = c(NA, -10L
), class = "data.frame")
> df
a b d
1 NA NA NA
2 NA NA NA
3 1 NA NA
4 5 57 NA
5 34 2 5
6 7 7 7
7 3 9 2
8 5 5 8
9 8 12 2
10 4 100 5
应该导致:
a b d
1 1 57 5
2 5 2 7
3 34 7 2
4 7 9 8
5 3 5 2
6 5 12 5
7 8 100 NA
8 4 NA NA
9 NA NA NA
10 NA NA NA
似乎是一项简单的任务,但我不知道从哪里开始......你能帮忙吗?
【问题讨论】:
-
请注意,这里的数据实际上发生了变化(从行的角度来看):这是故意的,还是您只是想将 NA 排序到底部?
-
这是故意的,我基本上希望所有数字都按行对齐,因此每一列都应该单独向上移动。
-
无法想象你需要它做什么,但我发布了一个答案。您可能需要寻找 data.table 解决方案,它们通常是最快的。
-
等一下...你是说如果你有一个像
c(NA, 2, 3, 1)这样的简单向量,那么结果就必须是c(2,3,1,NA)?那真的会改变这个问题! -
@PascalvKooten 是的,完全正确,抱歉,如果不清楚,我会更新问题!