将数据分成由tidyr中另一列给出的列

cbo*_*tig 5 r tidyr

我正在整理在单独的列中给出所需列名映射的数据,如下所示:

df <- data.frame(splitme = c("6, 7, 8, 9", "1,2,3"), 
                 type = c("A, B, C, D", "A, C, D"))
Run Code Online (Sandbox Code Playgroud)

df看起来像:

     splitme       type
 6, 7, 8, 9       A, B, C, D
      1,2,3       A, C, D
Run Code Online (Sandbox Code Playgroud)

所需的输出应如下所示:

desired_output <- data.frame(A = c(6,1), 
                             B = c(7, NA), 
                             C = c(8,2), 
                             D = c(9,3))
Run Code Online (Sandbox Code Playgroud)

即:

  A  B C D
  6  7 8 9
  1 NA 2 3
Run Code Online (Sandbox Code Playgroud)

如果不是某些行缺少类型的事实,这将是一个直接的任务tidyr::separate.

## Not correctly aligned
df %>% 
tidyr::separate(splitme, into = c("A", "B", "C", "D")) %>% 
select(-type)
Run Code Online (Sandbox Code Playgroud)

但很明显,对齐会带来问题.如果只有into参数可以采用指定拆分规则的列.也许有一个purr::pmap_df可以在这里使用的基础策略?

Psi*_*dom 5

你可以使用separate_rows后面的重塑spread:

library(dplyr); library(tidyr);
df %>% 
    # add a row identification number for reshaping purpose
    mutate(rn = row_number()) %>% 
    separate_rows(splitme, type) %>% 
    spread(type, splitme) %>% 
    select(-rn)

#  A    B C D
#1 6    7 8 9
#2 1 <NA> 2 3
Run Code Online (Sandbox Code Playgroud)