融化数据框和分割值

beh*_*has 3 r

我有以下数据框,测量连接成一个列,由一些分隔符分隔:

df <- data.frame(v1=c(1,2), v2=c("a;b;c", "d;e;f"))
df
     v1 v2
  1  1  a;b;c
  2  2  d;e;f;g
Run Code Online (Sandbox Code Playgroud)

我想将其融化/转换为以下格式:

     v1 v2
  1  1  a
  2  1  b
  3  1  c
  4  2  d
  5  2  e
  6  2  f
  7  2  g
Run Code Online (Sandbox Code Playgroud)

有优雅的解决方案吗?

谢谢!

Sve*_*ein 6

您可以拆分字符串strsplit.

拆分第二列中的字符串:

splitted <- strsplit(as.character(df$v2), ";")
Run Code Online (Sandbox Code Playgroud)

创建一个新的数据框:

data.frame(v1 = rep.int(df$v1, sapply(splitted, length)), v2 = unlist(splitted))
Run Code Online (Sandbox Code Playgroud)

结果:

  v1 v2
1  1  a
2  1  b
3  1  c
4  2  d
5  2  e
6  2  f
Run Code Online (Sandbox Code Playgroud)