Соедините несколько столбцов с несколькими пропущенными значениями между - PullRequest
0 голосов
/ 07 февраля 2020

Как соединить значения нескольких столбцов в один столбец, но пропустить пропущенные значения между / где-либо в столбцах?

У меня есть 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

1 Ответ

1 голос
/ 07 февраля 2020

Мы можем использовать apply по строкам и вставлять значения, которые не являются пустыми вместе.

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   

с помощью tidyverse мы можем заменить пустые ячейки на NA, а затем использовать unite, чтобы объединить несколько столбцов в 1, удаляя значения NA.

library(dplyr)
library(tidyr)
df %>%
  mutate_all(~na_if(., '')) %>%
  unite(col4, col1:col3, remove = FALSE, sep = ";",na.rm = TRUE)
...