r - 取出数据子集,取平均值,创建一个新的数据框。有更容易的方法吗?

标签 r if-statement for-loop

我有这样的数据:

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/

相关文章:

r - 如何强制函数传递某个对象(例如值),而不是失败并传递错误消息

r - 创建与我的 `geom_smooth(method = lm)` 线平行的线

c - 为什么编译器没有警告我空的 if 语句?

java - 使用 if 语句查找绝对值

python - 正则表达式for循环在python中的列表

r - 是否可以在 pdf 中使用 R knitr::kable 生成的表格中添加垂直线?

r - 在光栅键周围绘制一个框

C#-为什么此 if 语句会删除 StreamReader 输出上的换行符?

python - zip 列表太多项目无法解压

c++ - for循环的奇数输出