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?将数据以宽格式放置会更容易吗? (如果有,将会更新)
答案 0 :(得分: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创建。