如何将单个 NA 移动到 R 中列的底部
How to shift single NA to bottom of column in R
我有以下数据框:
example=data.frame(x=c(1,2,3),y=c(4,5,6))
x y
1 1 4
2 2 5
3 3 6
我想从其中 1 列中删除一个值,所以我得到了这个(我使用 example$x[example$x==2]<-NA
实现):
x y
1 1 4
2 NA 5
3 3 6
但现在我卡住了,因为我现在想将剩余的值向上移动,以便 NA 位于底部:
x y
1 1 4
2 3 5
3 NA 6
最终我希望能够对两列执行此操作,在不同的行中使用单个值,例如:
来自:
x y
1 1 NA
2 NA 5
3 3 6
收件人:
x y
1 1 5
2 3 6
3 NA NA
希望有人有一个简单的解决方案!谢谢
这是一个使用 is.na
和子集 [
的方法。从这个数据集开始。
example=data.frame(x=c(1,NA,3),y=c(NA,5,6))
example
x y
1 1 NA
2 NA 5
3 3 6
你 运行 通过 lapply
遍历每个变量并获取不丢失的变量,并在末尾附加这些缺失值。然后使用 example[] <-
将此结果反馈回原始数据集,它保持 data.frame 结构。
example[] <- lapply(example, function(x) c(x[!is.na(x)], x[is.na(x)]))
example
x y
1 1 5
2 3 6
3 NA NA
我们也可以像这样使用更新的 (R 3.3.3) grouping
函数
example[] <- lapply(example, function(x) x[grouping(is.na(x))])
或order
example[] <- lapply(example, function(x) x[order(is.na(x))])
在最后两个中,关键是在 is.na
上排序而不是元素本身。这样您就可以保留非空元素的原始顺序。
我们也可以用tidyverse
library(dplyr)
example %>%
mutate_all(funs(.[order(is.na(.))]))
# x y
#1 1 5
#2 3 6
#3 NA NA
如果列需要依赖
example %>%
arrange_all(funs(is.na(.)))
我有以下数据框:
example=data.frame(x=c(1,2,3),y=c(4,5,6))
x y
1 1 4
2 2 5
3 3 6
我想从其中 1 列中删除一个值,所以我得到了这个(我使用 example$x[example$x==2]<-NA
实现):
x y
1 1 4
2 NA 5
3 3 6
但现在我卡住了,因为我现在想将剩余的值向上移动,以便 NA 位于底部:
x y
1 1 4
2 3 5
3 NA 6
最终我希望能够对两列执行此操作,在不同的行中使用单个值,例如:
来自:
x y
1 1 NA
2 NA 5
3 3 6
收件人:
x y
1 1 5
2 3 6
3 NA NA
希望有人有一个简单的解决方案!谢谢
这是一个使用 is.na
和子集 [
的方法。从这个数据集开始。
example=data.frame(x=c(1,NA,3),y=c(NA,5,6))
example
x y
1 1 NA
2 NA 5
3 3 6
你 运行 通过 lapply
遍历每个变量并获取不丢失的变量,并在末尾附加这些缺失值。然后使用 example[] <-
将此结果反馈回原始数据集,它保持 data.frame 结构。
example[] <- lapply(example, function(x) c(x[!is.na(x)], x[is.na(x)]))
example
x y
1 1 5
2 3 6
3 NA NA
我们也可以像这样使用更新的 (R 3.3.3) grouping
函数
example[] <- lapply(example, function(x) x[grouping(is.na(x))])
或order
example[] <- lapply(example, function(x) x[order(is.na(x))])
在最后两个中,关键是在 is.na
上排序而不是元素本身。这样您就可以保留非空元素的原始顺序。
我们也可以用tidyverse
library(dplyr)
example %>%
mutate_all(funs(.[order(is.na(.))]))
# x y
#1 1 5
#2 3 6
#3 NA NA
如果列需要依赖
example %>%
arrange_all(funs(is.na(.)))