我有一个包含许多行的列表,其形式就像这样
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
函数将它们分开,然后我想将它们组合在一起,但我没有成功,我有错误,我无法继续它。
答案 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 '