对于以下数据框,
mydata=data.frame(x1=c(4,8,7,12,10),x2=c(5,7,18,4,12),x3=c(10,12,5,2,14))
mydata
x1 x2 x3
1 4 5 10
2 8 7 12
3 7 18 5
4 12 4 2
5 10 12 14
我想创建一个新的3列,其中每个列将通过重复每个元素12次来创建。对于第一个新列,
y1=matrix(NA, nrow=5,ncol=12)
for ( g in 1:5){
y1[g,]=rep(mydata$x1[g],12)
}
ynew_1=c(apply( y1, 1, c))
ynew_1
4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 8 8 8 8 8 8 7 7
7 7 7 7 7 7 7 7 7 7 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10
我可以用类似的方式创建ynew_2和ynew_3。 我可以使用任何函数或循环来创建这些新变量吗?任何帮助将不胜感激
答案 0 :(得分:1)
使用tidyr
newdata <- mydata %>% uncount(12)
uncount
“根据变量或表达式复制行”,它可以满足您的需要,而不会通过循环降低代码速度并将其保留为数据帧。