我的问题类似于关于合并
的现有问题,但我想逐行合并几列,以便将 NA 推到最后一列。
这是一个例子:
如果我有
a <- data.frame(A=c(2,NA,4,3,2), B=c(NA,3,4,NA,5), C= c(1,3,6,7,NA), D=c(5,6,NA,4,3), E=c(2,NA,1,3,NA))
A B C D E
1 2 NA 1 5 2
2 NA 3 3 6 NA
3 4 4 6 NA 1
4 3 NA 7 4 3
5 2 5 NA 3 NA
我想得到
b <- data.frame(A=c(2,3,4,3,2), B=c(1,3,4,7,5), C=c(5,6,6,4,3), D=c(2,NA,1,3,NA))
A B C D
1 2 1 5 2
2 3 3 6 NA
3 4 4 6 1
4 3 7 4 3
5 2 5 3 NA
有人知道我该怎么做吗?我将非常感谢任何提示,因为我的搜索已经枯竭。
最佳答案
您可以使用unite
和separate
:
library(tidyverse)
a %>%
unite(newcol, everything(), na.rm = TRUE) %>%
separate(newcol, into = LETTERS[1:4])
A B C D
1 2 1 5 2
2 3 3 6 <NA>
3 4 4 6 1
4 3 7 4 3
5 2 5 3 <NA>
由于您在separate
中有未知数量的新列,因此可以使用splitstackshape
的函数cSplit
:
library(splitstackshape)
a %>%
unite(newcol, na.rm = TRUE) %>%
cSplit("newcol", "_", type.convert = F) %>%
rename_with(~ LETTERS)
关于r - 一次合并多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71525645/