【发布时间】:2017-08-01 13:57:03
【问题描述】:
我每隔三列将结果加在一起并将结果放入一个新列中,我必须在一个包含 300 多列的数据框中执行此操作。我可以使循环来执行添加,但我在命名新列时遇到了麻烦。这是我想要的一个示例,我已经尝试过这样的 var:
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
x4 <- rnorm(100)
x5 <- rnorm(100)
x6 <- rnorm(100)
x7 <- rnorm(100)
x8 <- rnorm(100)
x9 <- rnorm(100)
x10 <- rnorm(100)
x11 <- rnorm(100)
x12 <- rnorm(100)
df <- data.frame(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10, x11,x12)
for (i in 2:4){
new <- apply(df[,c(i,i+3,i+6)],1,sum,na.rm=T)
df <- cbind(df, new[i-1])
}
我希望新列的名称显示为“new1”、“new2”和“new3”,但是在我的代码中它们都被命名为“new[i]。请不要说我确定有在不使用循环的情况下创建此列的其他可能更好的方法,但我特别有兴趣找出我的循环有什么问题并保持使用它。谢谢
【问题讨论】:
-
仅供参考,一种更 R-ish、矢量化的方式是
cbind(df, setNames(data.frame(rowSums(df[c(T, F, F)]), rowSums(df[c(F, T, F)]), rowSums(df[c(F, F, T)])), paste0('new', seq(ncol(df) / 4))))
标签: r loops dataframe columnname