我有一个read.csv读入的数据框(df),如下所示:
Reaction GID
1 A1 11
2 A2 21 / 22 / 23 / 24
3 A3 31 / 32
4 A4 41
5 A5 51 / 52 / 53
带有列标题的数据框有2列和n行,但是" GID" columns包含多个条目的字符串,用" /"分隔。如您所见,字符串在每一行中的长度都不相同。 我希望列由每个" /" -entry分隔,然后融化为长格式。
因此看起来应该是这样的:
Reaction GID
1 A1 11
2 A2 21
3 A2 22
4 A2 23
5 A2 24
6 A3 31
等等。我首先应用此处的代码:Multiple Separators for the same file input R
df2 <-do.call(rbind.data.frame,strsplit(df$GID," / "))
然而,这些行只有一个条目&#34; GID&#34;也应该是多重的,其中应该省略重复的条目。
GID
1 11, 11, 11, 11
2 21, 22, 23, 24
3 31, 32, 31, 32
因此,这种方法可以回收条目以及第一个&#34;反应&#34;遗漏了标识符的列,无法进行合并或匹配。
对我来说,这看起来不是正确的方法。达到目标的正确方法是什么?
答案 0 :(得分:1)
我们可以使用cSplit
library(splitstackshape)
cSplit(df, "GID", " / ", "long")
# Reaction GID
# 1: A1 11
# 2: A2 21
# 3: A2 22
# 4: A2 23
# 5: A2 24
# 6: A3 31
# 7: A3 32
# 8: A4 41
# 9: A5 51
#10: A5 52
#11: A5 53
df <- structure(list(Reaction = c("A1", "A2", "A3", "A4", "A5"),
GID = c("11",
"21 / 22 / 23 / 24", "31 / 32", "41", "51 / 52 / 53")),
.Names = c("Reaction", "GID"), class = "data.frame",
row.names = c("1", "2", "3", "4", "5"))