r - 一次合并多个列

标签 r dataframe dplyr

我的问题类似于关于合并的现有问题,但我想逐行合并几列,以便将 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

有人知道我该怎么做吗?我将非常感谢任何提示,因为我的搜索已经枯竭。

最佳答案

您可以使用uniteseparate:

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/

相关文章:

R + ggplot : Time series with events

r - 如何将矩阵的每一行除以R中向量的元素

python - Pandas 回合不适用于 DataFrame

r - 使用带有 $ 的逻辑向量对数据帧进行子集

r - 如何仅替换R中列的每一行中 ":"之前的部分

r - 预测多个独立组的线性回归

r - 更改格子图中标题面板的大小

python - 在 python pandas 数据帧中添加时间序列强度的廉价方法

r - 管道内 n_distinct 的意外行为

R:如何使用正则表达式提取句子