从r中的单个数据帧创建多个数据帧

时间:2014-06-09 12:39:32

标签: r

我有一个大型数据框finaldata,我希望生成一堆其他较小的数据框explanatory1, explanatory2 e.t.c....,每个数据框由finaldata

我尝试使用for循环执行此操作,但它给我一个错误attempt to apply non function

for(i in 1:length(finaldata)/10) {
  nam <- paste("explanatory", i, sep = "")
  assign(nam, finaldata[,10(i):10(i)+10])
}

我也试过

for(i in 1:length(finaldata)/10){
  assign(paste("explanatory",i,sep=""),finaldata[,10(i):10(i)+10])}

但这给了我同样的错误,据我所知,错误是由于我将finaldata[,10(i):10(i)+10]作为分配的论据而引起的,但我不明白为什么它不会起作用ina for循环,或者与传递finaldata[,10:10+10]

有任何不同

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:4)

使用split

ll <- lapply(split(colnames(finaldata),rep(seq_len(ncol(finaldata)/10),each=10)),
       function(x)finaldata[,x])

这将创建一个列表。但你可以从中提取单独的变量(不推荐):

ll <- setNames(ll,paste0("explanatory",seq_along(ll)))
list2env(ll)

答案 1 :(得分:2)

创建要播放的样本数据:

df <- data.frame(matrix(vector(), 10, 33))

查找您要创建的数据框的数量:

number_of_dataframes <- ceiling(ncol(df) / 10)

循环遍历数据框,查找用于创建单个数据框的一系列列。使用assign为每个人提供一个唯一的名称:

current_column <- 1
for (i in 1:number_of_dataframes) {
  start_column <- current_column
  end_column <- min(current_column + 9, ncol(df))
  assign(paste0("df",i), df[ , start_column:end_column])
  current_column <- end_column + 1
}

min检查确保您不会尝试分配比原始数据框中更多的列。

答案 2 :(得分:1)

你差不多......试试这个......

for(i in 1:ncol(finaldata)/10) {
  nam <- paste0("explanatory")
  if((10*(i - 1)+10) > ncol(finaldata)){
        assign(nam, finaldata[,(10*(i-1) +1):ncol(finaldata)])
  }else{
        assign(nam, finaldata[,(10*(i-1) +1):(10*(i - 1)+10)])
  }
}

答案 3 :(得分:1)

这完全符合它,感谢@canary_in_the_data_mine。选择&#34; number_of_dataframes&#34;成为&#34; finaldata&#34;的一些因素你想要的目的是:

number_of_dataframes <- ceiling(ncol(finaldata) / 5)
current_column <- 1
for (i in 1:number_of_dataframes) {
  start_column <- current_column
  end_column <- current_column + 5
  assign(paste0(explanatory,i), finaldata[,start_column:end_column])
  current_column <- end_column + 1
}

我做的唯一改变是end_column。