R:展开数据帧行

时间:2016-06-05 17:56:31

标签: r loops dataframe expand

给定4x2数据帧,例如:

df <- 
  data.frame(
  X=c(1,3,6,10),
  Y=c('A','K','K3', 'K'))

我想得到一个10x2行的数据帧,X是1,2,...... 10(如1:10), Y复制df $ X中指定的次数,例如:

    X   Y
1   1   A
2   2   A
3   3   K
4   4   K
5   5   K
6   6   K3
7   7   K3
8   8   K3
9   9   K3
10  10  K

我能想到的唯一想法是通过像'伪代码一样循环'df'来构建Y

  for(i in 1:(nrow(df)-1)){
   Y <- c(Y,(rep.int(df$Y[i], df$X[i+1]-df$X[i])))}

看起来很笨拙。也许像reshape2splitstackshape这样的套餐会对我有帮助吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用dplyr

library(dplyr)
library(tidyr)
data.frame(X= min(df$X):max(df$X)) %>% 
         left_join(., df, by = "X") %>%
         fill(Y)
#    X  Y
#1   1  A
#2   2  A
#3   3  K
#4   4  K
#5   5  K
#6   6 K3
#7   7 K3
#8   8 K3
#9   9 K3
#10 10  K