我有这样的数据:
Site <- c(1,2,2,1,2,1,2,1,1,2)
Year <- c(1,1,1,2,2,1,1,2,2,2)
count <- c(0,1,0,3,1,1,2,4,1,0)
Species <- c(1,1,1,1,1,2,2,2,2,2)
df <- data.frame(Site, Year, count, Species)
所以它看起来像这样:
Site Year count Species
1 1 1 0 1
2 2 1 1 1
3 2 1 0 1
4 1 2 3 1
5 2 2 1 1
6 1 1 1 2
7 2 1 2 2
8 1 2 4 2
9 1 2 1 2
10 2 2 0 2
正如您所看到的,只有在某些年份,才会在同一地点进行多次计数,并且有两个不同的物种。 我想做的是:
1) 查找同一年在同一地点进行的计数
2)取这些计数的平均值
3)将平均计数放入数据框或向量中,以便稍后用于绘图。
我一直在玩它,到目前为止我想到的只是某种复杂的、堆叠的 for 循环,我不知道如何完成:
for (year in 1:length(df$Year)) {
for (site in 1:length(df$Site))
subset(Site==site & Year==year)
if (nrow > 1) mean(count)
但现在我陷入了困境,因为我不知道如何将新平均值放入新的数据框中,其中填充了站点、年份和物种信息。
有什么想法吗?还是我的方法一开始就错了?
最佳答案
尝试
library(dplyr)
df %>%
group_by(Site, Year, Species) %>%
summarise(mean = mean(count))
这给出:
#Source: local data frame [8 x 4]
#Groups: Site, Year [?]
#
# Site Year Species mean
# (dbl) (dbl) (dbl) (dbl)
#1 1 1 1 0.0
#2 1 1 2 1.0
#3 1 2 1 3.0
#4 1 2 2 2.5
#5 2 1 1 0.5
#6 2 1 2 2.0
#7 2 2 1 1.0
#8 2 2 2 0.0
关于r - 取出数据子集,取平均值,创建一个新的数据框。有更容易的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32531251/