首页 > 解决方案 > 在 R 中,如何让循环函数在每行都存在 site_id 的唯一站点上工作?

问题描述

我正在尝试制作一个代码循环,在其中我为每个站点(在这种情况下为湖)制作年度平均值。我有以下(我的子集)数据:

 SITE    YEAR   ANC   DOC    NO3    SBC_ALL  SBC.Na   SO4
 1434021 1996 -25.318 2.439 18.701  91.327  79.580  99.695
 020059O 2012  70.010 8.070  2.750 147.270 186.350  45.540
 1434021 1997 -22.534 2.387 21.617  96.635  84.946 102.071
 1434025 1994  25.352 1.595 15.334 172.988 159.256 117.223
 020059O 2003  48.140 7.860  4.410 156.010 188.340  78.000
 020059O 1993  28.230 7.430  3.420 139.540 181.590  84.550
 1364959 1993   6.050 0.756 19.111 148.300 131.157 118.411
 1434021 2008  -4.386 2.420 13.861  80.651  70.136  82.469
 143400680 1996 -20.842 4.961 16.075  99.999  88.871  88.057
 1364959 1997   2.650 1.845 25.613 143.504 126.480 104.679

我运行以下代码并获取行数据的图表。我想获取每个特定站点的图表(例如 SITE = 020059O)。从 1990 年到 2017 年,每个站点都有每年的年平均值。

for (site_id in mydata$SITE)
{ 
p <-
 filter(mydata, SITE == site_id) %>%
  ggplot(aes(x = YEAR, y = ANC)) +
  geom_line() +
  geom_point() +
  theme_bw() +
  ggtitle(site_id)
print(p)
}

此代码产生:

站点 020059O 的年度 ANC 示例

我已经研究过使用 distinct() 或 unique() 函数,但这些似乎删除了重复项。我需要数据中的重复项,因为它们包含年份和该年的平均值。我还有哪些其他选项只能在唯一的站点上运行 ggplot,但保留我需要的年度数据?

循环代码的最初想法来自:http ://www.r-gators.com/2017/10/25/loops-in-r/

标签: rggplot2dplyr

解决方案


for (site_id in unique(mydata$SITE))
  { 
    p <- filter(mydata, SITE == site_id) %>%
      ggplot(aes(x = YEAR, y = ANC)) +
      geom_line() +
      geom_point() +
      theme_bw() +
      ggtitle(site_id)
      print(p)
  }

这只会从要循环的 ID 列表中删除重复项 - 您仍然会在输出中获得多行。


推荐阅读