如何使用for在不同的数据框中添加新变量?

时间:2016-11-15 13:26:28

标签: r for-loop

我有不同的数据框“dsub_i_j”

i= 316,  325, 1101, 1349, 1544, ...
j= 1,2,3,4,5,6,7,8

dsub_101_1
dsub_101_2
.
.
dsub_101_8
dsub_316_1
dsub_316_2
.
.
.

我想在每个data_frame中添加相同的变量:

我的意思是为每个j做这个:

# j= 101 

dsub_101_1$orden_grupo=seq(1, nrow(dsub_101_1), by = 1)
dsub_101_2$orden_grupo=seq(1, nrow(dsub_101_2), by = 1)
dsub_101_3$orden_grupo=seq(1, nrow(dsub_101_3), by = 1)
dsub_101_4$orden_grupo=seq(1, nrow(dsub_101_4), by = 1)
dsub_101_5$orden_grupo=seq(1, nrow(dsub_101_5), by = 1)
dsub_101_6$orden_grupo=seq(1, nrow(dsub_101_6), by = 1)
dsub_101_7$orden_grupo=seq(1, nrow(dsub_101_7), by = 1)
dsub_101_8$orden_grupo=seq(1, nrow(dsub_101_8), by = 1)

然后将每个组粘贴在一起。

dsub_101=rbind(dsub_101_1,dsub_101_2,dsub_101_3,dsub_101_4,dsub_101_5,  
               dsub_101_6,dsub_101_7,dsub_101_8)

dsub_101$orden=seq(1, nrow(dsub_101), by = 1)

并在setwd中保存每一个。

我试过这个但是没有用。 :(

 grupo_fict_groups = c(1,2,3,4,5,6,7,8)
 cod_jer_grups= c(101,  316,  325, 1349, 1544,...)

 for(i in cod_jer_groups ){
 for(j in grupo_fict_groups){

    dsub_i_j$orden_grupo=seq(1, nrow(dsub_i_j), by = 1)

   }}

任何建议?

由于

1 个答案:

答案 0 :(得分:0)

创建将数据框绑定在一起并添加id列的函数可以帮助迭代。

rbind.id <- function(..., id.col="orden_grupo") {
  args <- list(...)
  dfs <- if(length(args) == 1 && is.list(args[[1]])) args[[1]] else args
  df2 <- do.call("rbind", dfs)
  df2[,id.col] <- unlist(lapply(dfs, function(x) 1:nrow(x)))
  return(df2)
}

新的rbind.id函数执行常规rbind的功能,但也为每个df添加了一个id。接下来,我们可以在lapply循环中包装此函数,以循环多个数据框组。

multi.bind <- function(patterns) {
  lapply(patterns, function(p) rbind.id(mget(ls(pattern=p, envir=.GlobalEnv),envir=.GlobalEnv)))
}

这个multi.bind函数接受一个模式向量作为输入。这些是您示例中的dsub_i标签。可能的循环可能是:

i <- c(316,  325, 1101, 1349, 1544)
allgrps <- paste0("dsub_", i)
multi.bind(patterns=allgrps)