多次重复并绑定数据帧的多列

问题描述 投票:0回答:1

假设我有以下两个数据框

set.seed(20)
df1 <- as.data.frame(matrix(runif(n=700, min=1, max=10), nrow=10))
df2 <- data.frame("name" = colnames(df1), "n" = round(runif(n=10, min=1, max=20), 0))
head(df1[1:3])
head(df2)

我想复制并绑定每一列

df1
df2$n-1
次。基本上,我想这样做

df1 <- cbind(df1, rep(df1[1],4-1))
df1 <- cbind(df1, rep(df1[2],1-1))
df1 <- cbind(df1, rep(df1[3],11-1))
...

对于 df1 的每一列,现在可能已经完成了对所有 70 个变量的单独操作:D,但我想找到优雅的解决方案。

我怎样才能有效地做到这一点?我想

for
循环或
apply
系列的东西会起作用,但我无法做到正确。此外,应跳过
for
循环或
apply
df2$n==1
(如
df1[2]
)中的错误,因为不应重复此列。

感谢您的帮助!

for-loop error-handling apply cbind rep
1个回答
0
投票

好吧,我的想法太复杂了,我尝试了这样的事情

for (col in 1:ncol(df1)) {
  for (n in 1:nrow(df2)) {
    if (df2[n,2]==1) {
     next
    }
    if (col > 70) {
     break
    }
    df1 <- cbind(df1, rep(df1[col],df2[n,2]-1))
  }
}

无法正常工作。答案(改编自此处如何在数据框中复制列)很简单

df1 <- df1[rep(names(df1), c(df2$n))]
© www.soinside.com 2019 - 2024. All rights reserved.