【问题标题】:Looping through a column in R as variable changes循环遍历 R 中的列作为变量更改
【发布时间】:2020-10-16 16:52:44
【问题描述】:

我是一个新手,试图分析 R 中的陷阱捕获数据,并且正在寻找一种有效的方法来循环通过陷阱线。第一列是陷阱 ID。第二列是每个陷阱关联的陷阱线。其余列是与每次访问陷阱的目标捕获量和兼捕获量相关的值。我想编写代码,在每次访问期间评估每个陷阱行的数据。这是我正在使用的数据示例:

样本数据:

Data <- structure(list(Trap_ID = c(1L, 2L, 1L, 1L, 2L, 3L), Trapline = c("Cemetery", 
"Cemetery", "Golf", "Church", "Church", "Church"), Target_Visit_1 = c(0L, 
1L, 5L, 0L, 1L, 1L), Bycatch_Visit_1 = c(3L, 2L, 0L, 2L, 1L, 
4L), Target_Visit_2 = c(1L, 1L, 2L, 0L, 1L, 0L), Bycatch_Visit_2 = c(4L, 
2L, 1L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA, 
-6L))

每个陷阱线的陷阱数量各不相同。我有一个为每个 Trapline 编写的代码(有 14 条不同的 Trapline),但我希望有一种方法可以将它合并到一行代码中,在 Trapline 不变时计算值,然后当它更改为下一个陷阱线,它将开始新的计算。下面是一个示例,说明我如何找到在 Cemetery Trapline 发现的访问 1 的兼捕总和。

CemetaryBycatch1 <- Data %>% select(Bycatch Visit 1 %>% filter(Data$Trapline == "Cemetery")
sum(CemetaryBycatch1)

到目前为止,我为每次访问的每个陷阱线都编写了这样的代码,但是有 14 条陷阱线和 8 次访问,我希望避免编写这么多行代码,并希望有一个使用一段代码循环遍历它的方法,该代码将计算每个陷阱线的值(总和、平均值等)。

谢谢

【问题讨论】:

  • 使用Data %&gt;% group_by(Trapline) %&gt;% ...
  • 欢迎来到stackoverflow!如果您还没有这样做,请花一些时间查看要做什么when someone answers your question。访问help center,可以找到有关stackoverflow 新用户的更多信息。

标签: r loops


【解决方案1】:

这样的事情对你有帮助吗?

您可以在group_bysummarise_all 之间为Trapline 添加filter

代码:

library(dplyr)

Data <- structure(list(Trap_ID = c(1L, 2L, 1L, 1L, 2L, 3L), Trapline = c("Cemetery", 
"Cemetery", "Golf", "Church", "Church", "Church"), Target_Visit_1 = c(0L, 
1L, 5L, 0L, 1L, 1L), Bycatch_Visit_1 = c(3L, 2L, 0L, 2L, 1L, 
4L), Target_Visit_2 = c(1L, 1L, 2L, 0L, 1L, 0L), Bycatch_Visit_2 = c(4L, 
2L, 1L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA, 
-6L))
df

Data %>%
  group_by(Trap_ID, Trapline) %>%
  summarise_all(list(sum))

输出:

#> # A tibble: 6 x 6
#> # Groups:   Trap_ID [3]
#>   Trap_ID Trapline Target_Visit_1 Bycatch_Visit_1 Target_Visit_2 Bycatch_Visit_2
#>     <int> <chr>             <int>           <int>          <int>           <int>
#> 1       1 Cemetery              0               3              1               4
#> 2       1 Church                0               2              0               0
#> 3       1 Golf                  5               0              2               1
#> 4       2 Cemetery              1               2              1               2
#> 5       2 Church                1               1              1               1
#> 6       3 Church                1               4              0               0

reprex package (v0.3.0) 于 2020 年 10 月 16 日创建

Data添加另一行:

Trap_ID Trapline Target_Visit_1 Bycatch_Visit_1 Target_Visit_2 Bycatch_Visit_2
1       Cemetery 100            200              1             4

会给你:


#> # A tibble: 6 x 6
#> # Groups:   Trap_ID [3]
#>   Trap_ID Trapline Target_Visit_1 Bycatch_Visit_1 Target_Visit_2 Bycatch_Visit_2
#>     <int> <chr>             <int>           <int>          <int>           <int>
#> 1       1 Cemetery            100             203              2               8
#> 2       1 Church                0               2              0               0
#> 3       1 Golf                  5               0              2               1
#> 4       2 Cemetery              1               2              1               2
#> 5       2 Church                1               1              1               1
#> 6       3 Church                1               4              0               0

reprex package (v0.3.0) 于 2020 年 10 月 16 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2016-01-18
    • 2010-12-09
    相关资源
    最近更新 更多