R 连接中间有多个缺失值的多列
如何将多列的值连接到一列中,但跳过列之间/列中任何位置的缺失值 我有df,我想把它做成df2R 连接中间有多个缺失值的多列,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<- 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)