根据 R 中另一个数据框的平均值创建新数据框

时间:2021-04-26 22:48:20

标签: r list dataframe

我有一个由 310890 行和 5 列组成的物候“数据”,分别名为“物种”、“观察年”、“观察日”、“纬度”和“经度”。

str(data)

'data.frame':310890 观察。共 5 个变量:

$ 物种:chr "Acer_campestre" "Acer_campestre" "Acer_campestre" "Acer_campestre" ...

$ Observation_Year : int 1999 1999 2000 2000 1999 1999 1999 1999 1954 1955 ...

$ Observation_Day : int 116 118 80 121 91 84 119 123 131 132 ...

$ 纬度:num 52.1 52.4 52.6 52.6 53 ...

$ 经度:num 0.323 -1.573 -1.026 -1.128 -2.207 ...

总共有 403 种。 “Observation_Year”始于 1952 年,结束于 2019 年。 对于每个物种,我在不同的“Observation_Year”和不同地点(纬度和经度)中记录了多个“Observation_Day”值。 观测年不是连续的,所以时间序列有差距。

我想创建一个由 68 行(从 1952 年到 2019 年的连续年份)和 404 列组成的新数据框,其中第一列是年份,其他 403 列是每个观察日的平均值年份和每个物种。

例如,新数据框

年份 Acer_campestre Acer_platanoides Acer_pseudoplatanus ...
1952 124 114 122
1953 101 109 不适用
1954 131 NA 114
1955 132 109 不适用
1956 NA NA NA
………………
2019 北美 180 200

我尝试了以下代码,但我只得到了最后一个物种的平均值,相反,我想要一个新的 data.frame,其中包含从 1952 年到 2019 年的列中每个物种的时间序列。

species <- unique(data$Species)

length(unique(species)) # 403 Different species

library(dplyr)

for(i in 1:length(species)) {
data2 <- data
data3 <- data[which(data$Species == species[i]),] %>%
group_by(Observation_Year) %>%
summarise(Mean = mean(Observation_Day, na.rm=TRUE))
assign(paste0("SubsetData",i), data3)}

感谢您的帮助

0 个答案:

没有答案
相关问题