【问题标题】:combine data frames after for loop在 for 循环后合并数据帧
【发布时间】:2014-12-02 03:46:06
【问题描述】:

我有一个清单。然后我开始一个 for 循环,在那个 for 循环中,我首先将变量名称转换为字符串,然后将列表竞争分配给字符串,以便我获得具有正确内容的正确名称。 循环完成后,我确实想将 item#1 与列表中的 #4、item#2 和 #5 等结合起来。 但是当组合这些项目时,我得到以下信息:

Error in [.data.frame(LoopVariable, , "F_corrected_normed_error") : undefined columns selected

稍后当我想用InorganicNoStdCondition进行计算时

这是我的代码示例:

ResidualList = list(IAEA_C2_NoStdCondition = IAEA_C2_NoStdCondition,
                    IAEA_C2_EAstd = IAEA_C2_EAstd,
                    IAEA_C2_STstd = IAEA_C2_STstd,
                    IAEA_C2_Bothstd = IAEA_C2_Bothstd,
                    TIRI_I_NoStdCondition = TIRI_I_NoStdCondition,
                    TIRI_I_EAstd = TIRI_I_EAstd,
                    TIRI_I_STstd = TIRI_I_STstd,
                    TIRI_I_Bothstd = TIRI_I_Bothstd
                    )          

C = 8

for(j in 1:C) {

#convert list Variable to string for later usage in filename as unique identifier!!    

SubNameString = names(ResidualList)[j]
SubNameString = paste0(SubNameString, "Residuals")

#print(SubNameString)
SubNameString = ResidualList[[j]]



SubNameString[ ,"F_corrected_normed"] = round(SubNameString[ ,"F_corrected_normed"] /       mean(SubNameString[ ,"F_corrected_normed"]),
                                              digit = 5
                                              )

SubNameString[ ,"F_corrected_normed_error"] = round(SubNameString[ ,"F_corrected_normed_error"] / mean(SubNameString[ ,"F_corrected_normed_error"]),
                                                    digit = 5
                                                    )
#View(SubNameString[ ,"F_corrected_normed"])
#print(SubNameString)

}
      View(SubNameString)
      InorganicNoStdCondition = data.frame(cbind(IAEA_C2_NoStdConditionResiduals, 
                                                 TIRI_I_NoStdConditionResiduals
                                                 )
                                           )

【问题讨论】:

  • 请给出一个可重现的例子
  • @Johannes 最好使用dput 显示一些数据,即。 dput(ResidualList)` 如果输出不是那么大。另外,如果可能的话,还有预期的结果。

标签: r for-loop dataframe


【解决方案1】:

如果您想更改ResidualListnames,您可以这样做:

   names(ResidualList) <- paste0(names(ResidualList), 'Residuals')

如果你想使用for循环

for(j in 1:C){
   names(ResidualList)[j] <- paste0(names(ResidualList[j]), 'Residuals')
   ResidualList[[j]][ ,"F_corrected_normed"] <- round(ResidualList[[j]][
      ,"F_corrected_normed"] / mean(ResidualList[[j]][ ,"F_corrected_normed"]),
                                           digit = 5)
   ResidualList[[j]][ ,"F_corrected_normed_error"] <- round(ResidualList[[j]][
    ,"F_corrected_normed_error"] / mean(ResidualList[[j]][
    ,"F_corrected_normed_error"]),digit = 5)                                     
 } 

  names(ResidualList)
  #[1] "IAEA_C2_NoStdConditionResiduals" "IAEA_C2_EAstdResiduals"         
  #[3] "IAEA_C2_STstdResiduals"          "IAEA_C2_BothstdResiduals"       
  #[5] "TIRI_I_NoStdConditionResiduals"  "TIRI_I_EAstdResiduals"          
  #[7] "TIRI_I_STstdResiduals"           "TIRI_I_BothstdResiduals"    

用于将列表元素 1 与 5、2 与 6 等组合起来。

res <- lapply(1:4, function(i) do.call(`cbind`,ResidualList[c(i, i+4)]))

不清楚您希望如何在res 的每个list 元素中命名列名

数据

 set.seed(29)
 IAEA_C2_NoStdCondition <- data.frame(F_corrected_normed=rnorm(10),
     F_corrected_normed_error=runif(10))
 IAEA_C2_EAstd <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 IAEA_C2_STstd <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 IAEA_C2_Bothstd <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 TIRI_I_NoStdCondition <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 TIRI_I_EAstd <-   data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 TIRI_I_STstd <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))
 TIRI_I_Bothstd <- data.frame(F_corrected_normed=rnorm(10), 
     F_corrected_normed_error=runif(10))


     ResidualList <- list(IAEA_C2_NoStdCondition = IAEA_C2_NoStdCondition,
                   IAEA_C2_EAstd = IAEA_C2_EAstd,
                   IAEA_C2_STstd = IAEA_C2_STstd,
                   IAEA_C2_Bothstd = IAEA_C2_Bothstd,
                   TIRI_I_NoStdCondition = TIRI_I_NoStdCondition,
                   TIRI_I_EAstd = TIRI_I_EAstd,
                   TIRI_I_STstd = TIRI_I_STstd,
                   TIRI_I_Bothstd = TIRI_I_Bothstd
                )             

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多