通过将两个单元格中的字符串列表组合在一起,将其转换为行

时间:2016-02-18 07:22:05

标签: r split

我有一个包含许多行的列表,其形式就像这样

Peter,Sam,Andrew         a,b,c,d
Anna,Susan,Sandra,Annie  e,f,g

我希望将其转换为像

这样的列表
Peter  a
Peter  b
Peter  c
Peter  d
Sam    a
Sam    b
Sam    c
Sam    d
...
Annie  e
Annie  f
Annie  g

我该怎么做?我在行上尝试了for循环并使用strsplit函数将它们分开,然后我想将它们组合在一起,但我没有成功,我有错误,我无法继续它。

1 个答案:

答案 0 :(得分:2)

我们可以使用cSplit

中的library(splitstackshape)
library(splitstackshape)
cSplit(cSplit(df1, 'v1', ',', 'long'), 'v2', ',', 'long')
#        v1 v2
# 1:  Peter  a
# 2:  Peter  b
# 3:  Peter  c
# 4:  Peter  d
# 5:    Sam  a
# 6:    Sam  b
# 7:    Sam  c
# 8:    Sam  d
# 9: Andrew  a
#10: Andrew  b
#11: Andrew  c
#12: Andrew  d
#13:   Anna  e
#14:   Anna  f
#15:   Anna  g
#16:  Susan  e
#17:  Susan  f
#18:  Susan  g
#19: Sandra  e
#20: Sandra  f
#21: Sandra  g
#22:  Annie  e
#23:  Annie  f
#24:  Annie  g

更新

如果我们有一个类似' str1'的字符串,我们可以获得' df1'使用strsplit然后执行cSplit

df1 <- data.frame(lapply(strsplit(str1, '\\s'), 
           matrix, ncol=2,byrow=TRUE))
cSplit(cSplit(df1, 'X1', ',', 'long'), 'X2', ',', 'long')

数据

df1 <- structure(list(v1 = c("Peter,Sam,Andrew", 
 "Anna,Susan,Sandra,Annie"
), v2 = c("a,b,c,d", "e,f,g")), .Names = c("v1", "v2"), 
class = "data.frame", row.names = c(NA, -2L))

str1 <- 'Anna,Susan,Sandra,Annie e,f,g Peter,Sam,Andrew a,b,c,d Anna,Susan,Sandra,Annie e,f,g '