给定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])))}
看起来很笨拙。也许像reshape2
或splitstackshape
这样的套餐会对我有帮助吗?
答案 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