我有这样的数据集:
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
提前谢谢
答案 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
的@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