R 连接中间有多个缺失值的多列

R 连接中间有多个缺失值的多列,r,data-manipulation,R,Data Manipulation,如何将多列的值连接到一列中,但跳过列之间/列中任何位置的缺失值 我有df,我想把它做成df2 df<- data_frame(col1 = c('', 'B', 'C', 'D', 'E'), col2 = c(1,3,'','',9), col3 = c('aa', 'bb', 'cc', '', '') ) df df2<- data_frame(col1 = c('', 'B', 'C', 'D', 'E'), col2

如何将多列的值连接到一列中,但跳过列之间/列中任何位置的缺失值

我有df,我想把它做成df2

df<- data_frame(col1 = c('', 'B', 'C', 'D', 'E'),
       col2 = c(1,3,'','',9),
       col3 = c('aa', 'bb', 'cc', '', '')
       )
df

df2<- data_frame(col1 = c('', 'B', 'C', 'D', 'E'),
       col2 = c(1,3,'','',9),
       col3 = c('aa', 'bb', 'cc', '', ''),
       col4 = c('1;aa','B;3;bb','C;cc','D','E;9')
       )
df2
我们可以使用apply rowwise并将不为空的值粘贴在一起

df$col4 <- apply(df, 1, function(x) paste(x[x!=""], collapse = ";"))

df2
# A tibble: 5 x 4
#  col1  col2  col3  col4  
#  <chr> <chr> <chr> <chr> 
#1 ""    "1"   "aa"  1;aa  
#2 "B"   "3"   "bb"  B;3;bb
#3 "C"   ""    "cc"  C;cc  
#4 "D"   ""    ""    D     
#5 "E"   "9"   ""    E;9   
library(dplyr)
library(tidyr)
df %>%
  mutate_all(~na_if(., '')) %>%
  unite(col4, col1:col3, remove = FALSE, sep = ";",na.rm = TRUE)