使用多个分隔符格式化不均匀数据框

时间:2016-07-05 16:05:30

标签: r dataframe

我有一个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;遗漏了标识符的列,无法进行合并或匹配。

对我来说,这看起来不是正确的方法。达到目标的正确方法是什么?

1 个答案:

答案 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"))