我想基于一个大数据帧(df0)生成多个数据帧(df1,df2等)。每个新数据框都应包含来自df0的某些列混合。
df0 <- data.frame(v0=c(0, 0), v1=c(3, 4), v2=c(5, 6), v3=c(7, 8))
for(i in 1:3) {
secondcol <- colnames(df0[,..i]) # I get an error here
dfX = subset(df0, select = c("v0", secondcol)) # dfX should be df & i
}
# The for loop should replicate the following three comands:
df1 = subset(df0, select = c("v0", "v1"))
df2 = subset(df0, select = c("v0", "v2"))
df3 = subset(df0, select = c("v0", "v3"))
答案 0 :(得分:0)
许多方法可以做到这一点。 要使代码按以下方式工作:
library(dplyr)
for(i in 1:3) {
secondcol <- colnames(df0)[(i+1)]
dat <- select(df0, c("v0", secondcol))
assign(paste0("df", i), dat)
rm(dat)
}
@Rich解决方案要好得多。 如果您仍然希望将它们作为环境中的数据框,则可以使用:
i <- 1:3
list2env(setNames(lapply(i+1, function(j) df0[c(1, j)]), paste0("df", i)), envir = .GlobalEnv)
答案 1 :(得分:0)
我建议使用列表来使结果数据框架井井有条。这是使用lapply()
的方法。
i <- 1:3
setNames(lapply(i+1, function(j) df0[c(1, j)]), paste0("df", i))
# $df1
# v0 v1
# 1 0 3
# 2 0 4
#
# $df2
# v0 v2
# 1 0 5
# 2 0 6
#
# $df3
# v0 v3
# 1 0 7
# 2 0 8