拆分/融化数据

Joh*_*ene 0 r plyr reshape2 dplyr

说我有以下内容 data.frame

df <- data.frame(letters = c("a, b", "a", "b", "a, c"), value = c(1, 2, 3, 4))
df
#>   letters value
#> 1    a, b     1
#> 2       a     2
#> 3       b     3
#> 4    a, c     4
Run Code Online (Sandbox Code Playgroud)

我要拆分/融化到哪个

#>   letters value
#> 1       a     1
#> 2       b     1
#> 3       a     2
#> 4       b     3
#> 5       a     4 
#> 6       c     4 
Run Code Online (Sandbox Code Playgroud)

为了每个单独记录 letters

Ron*_*hah 5

你可以试试strsplit.拆分字符,,然后重复值字段.

char <- strsplit(as.character(df$letters), ',')
data.frame(letter=unlist(char), value=rep(df$value, sapply(char, FUN=length)))


   letter value
#1      a     1
#2      b     1
#3      a     2
#4      b     3
#5      a     4
#6      c     4
Run Code Online (Sandbox Code Playgroud)

根据评论中的@docendo discimus更新,您可以尝试更快的结果,

char <- strsplit(as.character(df$letters), ',', fixed = T)
data.frame(letter=unlist(char), value=rep(df$value, lengths(char)))
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`fixed = TRUE`来进行更快的字符串拆分和`length(char)`而不是`sapply(char,FUN = length)` (3认同)