将数据框的行根据逗号拆分为多行

4

我正在尝试基于字符序列", "来拆分data.frame中的一行。以下是一个例子:

mydat <- data.frame(v1 = c("name, name2", "name3", "name4, name5"),
                v2 = c("1, 2", "3", "4, 5"), 
                v3 = c(1, 2, 3))

我希望最终得到一个类似这样的data.frame

 v1   v2   v3
name  1    1
name2  2   1
name3  3   2
name4  4   2
name5  5   3

有什么建议吗?
3个回答

6

这应该可以正常工作。

install.packages("splitstackshape")
library(splitstackshape)
out <- concat.split.multiple(mydat, c("v1","v2"), seps=",", "long")


out
     v1 v2 v3
1:  name  1  1
2: name2  2  1
3: name3  3  2
4: name4  4  3
5: name5  5  3

太棒了!感谢你引导我注意到那个包! - Alex
1
concat.split.multiple()被弃用了。请使用cSplit()代替。 - Steven Beaupré

6

这里有另一种使用 data.table 包及其新的 tstrsplit 函数的方法。

library(data.table) # v >= 1.9.5
setDT(mydat)[, lapply(.SD, tstrsplit, ", "), by = v3]
#    v3    v1 v2
# 1:  1  name  1
# 2:  1 name2  2
# 3:  2 name3  3
# 4:  3 name4  4
# 5:  3 name5  5

1

为了后代,有倾向于使用tidyverse包的用户可以使用tidyrseparate_rows函数以及dplyr中的select(保持列的顺序)来完成此操作:

library(tidyverse)

mydat %>% separate_rows(v1,v2,sep=", ") %>% 
        select(v1, v2, v3)

#     v1 v2 v3
#1  name  1  1
#2 name2  2  1
#3 name3  3  2
#4 name4  4  3
#5 name5  5  3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接