首页 > 解决方案 > 通过循环遍历 R 中的数据框列表来创建数据框

问题描述

我有一个大型数据集,它被组织为 1044 个数据框的列表。每个数据帧都是一个配置文件,其中包含不同站点和时间的相同数据。我正在尝试创建一个保存函数输出的数据框fitsObs,但我当前的代码只通过一个数据框。有任何想法吗?

    i=1
start=1
for(i in 1:1044){
  station1 <- surveyCTD$stations[[i]]
  df1 <- surveyCTD$data[[i]]
  date1 <- surveyCTD$dates[[i]]

  fitObs <- fitTp2(-df1$depth, df1$temp)

  if(start==1){
    start=0
    dfout <- data.frame(
      date=date1
      ,station=station1
    )
    names(fitObs) <- paste0(names(fitObs),"o")
    dfout<-cbind(dfout, df1$temp, df1$depth)
    dfout <- cbind(dfout, fitObs)

  }
}

标签: rloopsdataframe

解决方案


我已经创建了一个可重复的示例,说明我对您所问的问题的最佳猜测。我还假设您能够调整此一般示例中的概念以适应您自己的问题。如果您将来提供列表示例,会更容易。

首先我们创建一些可重现的数据

a <- c(10,20,30,40)
b <- c(5,10,15,20)
c <- c(20,25,30,35)
df1 <- data.frame(x=a+1,y=b+1,z=c+1)
df2 <- data.frame(x=a,y=b,z=c)
ls1 <- list(df1,df2)

看起来像这样

print(ls1)
[[1]]
   x  y  z
1 11  6 21
2 21 11 26
3 31 16 31
4 41 21 36

[[2]]
   x  y  z
1 10  5 20
2 20 10 25
3 30 15 30
4 40 20 35

所以我们现在在一个列表中有两个数据框。然后,以下代码应该可以遍历列表的每个数据框中的列,并将 mean() 函数应用于列中的数据。您可以通过选择“1”而不是“2”将其更改为行。

df <- do.call("rbind", lapply(ls1, function(x) apply(x,2,mean)))
as.data.frame(df)
print(df)
   x   y   z
1 26 13.5 28.5
2 25 12.5 27.5

您应该能够用您为数据编写的任何函数替换 mean() 。让我知道这是否有帮助。


推荐阅读