根据序列号拆分列

时间:2017-01-04 15:33:57

标签: r dataframe

我有这样的数据集:

seq X
1   a
2   b
3   c
1   d
2   e
1   f
2   g
3   h
4   i
5   j

我想根据指定的seq对列进行拆分/分组,如下所示:

seq X    seq1  X1   seq2 X2
1   a    1     d    1    f
2   b    2     e    2    g
3   c    NA    NA   3    h
NA  NA   NA    NA   4    i
NA  NA   NA    NA   5    j

提前谢谢

2 个答案:

答案 0 :(得分:0)

我们需要先拆分数据框并应用合并不等数据帧的自定义函数,即

do.call(cbindPad, split(df, cumsum(df$seq == 1)))

#  1.seq  1.X 2.seq  2.X 3.seq 3.X
#1     1    a     1    d     1   f
#2     2    b     2    e     2   g
#3     3    c    NA <NA>     3   h
#4    NA <NA>    NA <NA>     4   i
#5    NA <NA>    NA <NA>     5   j

@ this post

的@joran回答cbindpad

答案 1 :(得分:0)

这只是为了探索,@ Sotos这种东西会起作用吗? bdw这有很多转置效率不高的

df1 = split(df, cumsum(df$seq == 1))
df2 = lapply(df1 , function(x) as.data.frame(t(x)))
#$`1`
#    V1 V2 V3
#seq  1  2  3
#X    a  b  c

#$`2`
#    V1 V2
#seq  1  2
#X    d  e

#$`3`
#    V1 V2 V3 V4 V5
#seq  1  2  3  4  5
#X    f  g  h  i  j

data.frame(t(rbind.fill(df2)))
#     X1   X2   X3   X4 X5 X6
#V1    1    a    1    d  1  f
#V2    2    b    2    e  2  g
#V3    3    c <NA> <NA>  3  h
#V4 <NA> <NA> <NA> <NA>  4  i
#V5 <NA> <NA> <NA> <NA>  5  j