将一列中的多个值拆分为多个行R.

plu*_*uke 16 r dplyr tidyr

我有一个数据框,大部分是每行一个观察.但是,某些行具有多个值:

# A tibble: 3 x 2
          `number`   abilities
             <dbl>       <chr>
1               51       b1261
2               57        d710
3               57 b1301; d550

structure(list(`number` = c(51, 57, 57), abilities = c("b1261", 
"d710", "b1301; d550")), .Names = c("number", "abilities"
), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))
Run Code Online (Sandbox Code Playgroud)

我想得到以下内容:

# A tibble: 3 x 2
          `number`   abilities
             <dbl>       <chr>
1               51       b1261
2               57        d710
3               57        d550
4               57       b1301
Run Code Online (Sandbox Code Playgroud)

它直截了当地分裂了; 但我不确定如何轻松添加新行,尤其是当能力可能包含2个以上的值时.

这非常类似于:R分号将列分隔为行但不需要删除重复项

Lam*_*mia 22

有一个函数separate_rowstidyr来做到这一点:

library(tidyr)
## The ";\\s+" means that the separator is a ";" followed by one or more spaces
separate_rows(df,abilities,sep=";\\s+")
  number abilities
   <dbl>     <chr>
1     51     b1261
2     57      d710
3     57     b1301
4     57      d550
Run Code Online (Sandbox Code Playgroud)


Mar*_*ius 5

dplyr对此有好处unnest

library(tidyverse)
library(stringr)
df %>%
    mutate(unpacked = str_split(abilities, ";")) %>%
    unnest %>%
    mutate(abilities = str_trim(unpacked))
Run Code Online (Sandbox Code Playgroud)