使用R中的大型数据帧列表访问数据帧的列

时间:2017-06-24 23:33:28

标签: r

所以我一直在努力解决这个问题。我还是R的新手还没有在这里找到解决方案。

我有一个data.frame,如下所示:

LandAverageTemperature LandAverageTemperatureUncertainty       date year
1     3.0340000000000003                             3.574 1750-01-01 1750
2                  3.083                             3.702 1750-02-01 1750
3                  5.626                             3.076 1750-03-01 1750
4                   8.49                             2.451 1750-04-01 1750
5                 11.573                             2.072 1750-05-01 1750
6     12.937000000000001                             1.724 1750-06-01 1750

所以我想要做的是:每年,我想获得LandAverageTemperature列的平均值。

我尝试使用split函数首先执行此操作:

df_list <- split(cleanGlobalTemps, f = cleanGlobalTemps$year)

这给我留下了266个元素的大量列表(从1750年到2016年每年一个)。我想遍历此列表中的每个dataframe并获取LandAverageTemperature列的平均值。

我试过了:

for(i in 1:length(df_list)){
  averageYearlyGlobalTemp[i] <- mean(as.double(df_list[[i]][[1]]), na.rm = TRUE)
}

但这不起作用,它会返回如下结果:

> averageYearlyGlobalTemp
  [1] 1320.1667  709.6667  973.1667 1319.7500 1120.9167 1300.2500 1368.9167 1365.7500 1133.5833 1335.8333 1056.8333
 [12] 1336.4167 1543.8333 1004.5000 1139.7500 1435.0000 1404.8333 1288.7500 1239.6667 1282.7500 1345.9167 1313.1667
 [23] 1469.5000 1273.2500 1151.7500 1304.0000

....等等。

3 个答案:

答案 0 :(得分:2)

df %>% 
  filter(!is.na(LandAverageTemperature)) %>%
  group_by(year) %>% 
  summarise( output = mean(LandAverageTemperature) )

答案 1 :(得分:0)

aggregate允许您按组计算统计信息

aggregate(cleanGlobalTemps$LandAverageTemperature, by=list(cleanGlobalTemps$year), FUN=mean)

答案 2 :(得分:0)

(代表OP发布)

非常感谢大家的帮助。 @先生。 Bugle下面建议的代码很有希望,但我无法得到正确答案。事实证明,因为我正在处理因素,我需要使用levels()函数来访问列中的正确值。

这是最终的工作代码:

averageYearlyGlobalTemp <- aggregate(as.numeric(levels(cleanGlobalTemps$LandAverageTemperature)[cleanGlobalTemps$LandAverageTemperature]), by=list(cleanGlobalTemps$year), FUN=mean, na.rm = TRUE)