R:扩展数据框行

R: Expand dataframe rows

给定一个 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 这样的软件包对我有帮助?

我们可以使用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