【问题标题】:Percent change for multiple events in RR中多个事件的百分比变化
【发布时间】:2018-10-17 00:06:39
【问题描述】:

记录了珊瑚礁图片上的随机点。使用 dplyr,我通过将一个点具有特定物种的次数除以总点数来找到物种的百分比覆盖率 (ID)。 Bellow 是这些数据的摘录。

Event                ID    Percent
    2   Bryozoan         0.2222222
    2   Chlorophyta      0.2222222
    3   Chlorophyta      0.2222222
    1   Coralline Algae  1.3333333
    2   Coralline Algae  2
    3   Coralline Algae  1.7777778
    4   Coralline Algae  7.1111111
    2   Macroalgae       1.1111111

我试图找出 4 个事件之间的百分比变化。因此,在我的珊瑚藻示例中,事件 1 到 2 的百分比变化从 1.333% 增加到 2%,将是

(2/1.33) * 100% = 150,

150-100 = 50%,所以增加了 50%。

然后我需要从每个事件 1 到 3、1 到 4、2 到 3 等进行百分比变化。

我在使用 lag() 函数时看到过类似的问题,但我不知道如何在我的情况下使用它,因为在每个事件中都可能找不到物种 (ID)。我应该如何在 R 中解决这个问题?将我的数据以宽格式放置会更容易吗? (如果有的话会更新)

【问题讨论】:

  • "event 1 to 3, 1 to 4, 2 to 3" 表示你想要所有的事件对组合?您希望如何存储它?这与只想要连续事件 1-2、2-3、3-4 形成对比,后者不包括(1-3、2-4 等)
  • 是的,所有配对组合,抱歉我想不出这个短语。
  • 您确定这个数据集(每个 ID 不包含四个事件)是正确的吗?您最好发布原始数据示例,而不是要求增加百分比。

标签: r dplyr


【解决方案1】:

您可以将表格连接到自身以产生所需的事件组合。我过滤以确保第二个事件编号大于第一个(如果它们相同,则更改为零,如果第二个较小,则它只是不同对的负数。)请注意,原始的第一个和最后一个行没有出现在这里,因为没有其他事件可以比较它们。

library(tidyverse)
tbl <- read_table2(
"Event  ID  Percent
2   Bryozoan    0.2222222
2   Chlorophyta 0.2222222
3   Chlorophyta 0.2222222
1   CorallineAlgae 1.3333333
2   CorallineAlgae 2
3   CorallineAlgae 1.7777778
4   CorallineAlgae 7.1111111
2   Macroalgae  1.1111111"
)
tbl %>%
  arrange(ID, Event) %>%
  left_join(tbl, by = c("ID")) %>%
  filter(Event.y > Event.x) %>%
  mutate(Percent.change = (Percent.y / Percent.x) - 1) %>%
  select(ID, Event.x, Event.y, Percent.x, Percent.y, Percent.change)
#> # A tibble: 7 x 6
#>   ID             Event.x Event.y Percent.x Percent.y Percent.change
#>   <chr>            <int>   <int>     <dbl>     <dbl>          <dbl>
#> 1 Chlorophyta          2       3     0.222     0.222          0    
#> 2 CorallineAlgae       1       2     1.33      2              0.500
#> 3 CorallineAlgae       1       3     1.33      1.78           0.333
#> 4 CorallineAlgae       1       4     1.33      7.11           4.33 
#> 5 CorallineAlgae       2       3     2         1.78          -0.111
#> 6 CorallineAlgae       2       4     2         7.11           2.56 
#> 7 CorallineAlgae       3       4     1.78      7.11           3.00

reprex package (v0.2.0) 于 2018 年 10 月 16 日创建。

【讨论】:

  • 我收到此错误消息“在 Ops.factor(Event.y, Event.x) 中:‘>’对因子没有意义”。当我卸下过滤器时,它就可以工作了。使过滤器工作的建议?
  • 错误信息显示“对因子没有意义”,这表明您已将Event 视为因子。将事件值设为整数而不是因子?
  • 已将事件转换为整数和相同的错误消息,但仍然实现了主要目标。谢谢。
  • 如果您只是将转换添加到管道中,那么当您将其连接到自身时,第二个副本仍然是一个因素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2015-09-29
  • 2021-07-18
  • 2018-06-20
相关资源
最近更新 更多