如何匹配R中列之间的多个对应值

时间:2015-07-15 09:13:04

标签: r

我有一个数据框,结构如下

ID  Value1    Value2
1   a;d;g;f   12;14;15;9
2   b;c;e     5;18;20
3   h;i;j     6;7;25

所以我有一个ID和两个值,对于值1,有一个对应于值2的多个选项。我想最终得到以下数据帧,即值1的每个选项及其对应的值2

ID  Value1   Value2
1   a        12
1   d        14
1   g        15
1   f        9
2   b        5
2   c        18
2   e        2
3   h        6
3   i        7
3   j        25

如何编写R来执行此操作?

2 个答案:

答案 0 :(得分:4)

另一种选择是使用tstrsplit的{​​{3}}中的data.table

library(data.table)
setDT(df)[, lapply(.SD, function(x) unlist(tstrsplit(x, ";", fixed=TRUE))), by = ID]
#     ID Value1 Value2
#  1:  1      a     12
#  2:  1      d     14
#  3:  1      g     15
#  4:  1      f      9
#  5:  2      b      5
#  6:  2      c     18
#  7:  2      e     20
#  8:  3      h      6
#  9:  3      i      7
# 10:  3      j     25

答案 1 :(得分:3)

或者base r(df1从@akrun借来):

vals <- lapply(colnames(df1)[-1], function(col){strsplit(df1[, col], ";")})
names(vals) <- colnames(df1)[-1]
v_id <- mapply(rep, df1$ID, lapply(s_v1, length))

data.frame(ID=unlist(v_id), lapply(vals, unlist), stringsAsFactors=F)

#    ID Value1 Value2
#1   1      a     12
#2   1      d     14
#3   1      g     15
#4   1      f      9
#5   2      b      5
#6   2      c     18
#7   2      e     20
#8   3      h      6
#9   3      i      7
#10  3      j     25