【发布时间】:2016-06-05 17:56:30
【问题描述】:
给定一个 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 这样的包会帮助我?
【问题讨论】:
-
你也可以做
splitstackshape::expandRows(df, c(diff(df$X), 1), FALSE)然后修复X列什么的 -
或基本 R 选项
transform(df[rep(1:nrow(df), c(diff(df$X),1)),], X= seq(max(df$X)))