所以我有一个原始数据框,它记录了 5 个样方中物种 A、B 和 C 的出现情况,如下所示:
df <- data.frame(quad_1=(c('A','A','B','B','C','C','C','C','B','B')),
quad_2=(c('A','B','C','B','B','A','B','B','B','B')),
quad_3=(c('A','B','A','A','A','A','B','C','A','B')),
quad_4=(c('B','C','C','C','C','B','C','A','B','A')),
quad_5=(c('C','B','B','A','A','B','B','C','A','A')))
我想旋转它,将“quadrat”作为一列,将 A、B 和 C 中每个物种的 % 覆盖率作为自己的列,如下所示:
df = data.frame(quadrat = (c('quad_1','quad_2','quad_3','quad_4','quad_5')),
A = (c(40,30,20,50,60)),
B = (c(10,10,30,40,10)),
C = (c(50,60,50,10,30)))
我知道我的样本数据中的值并不准确,但希望您能得到我的目标 - 非常感谢任何帮助!
library(tidyverse)
df |>
pivot_longer(everything(), names_to = "quadrat") |>
count(quadrat, value) |>
mutate(n = n / sum(n), .by = quadrat) |>
pivot_wider(names_from = value, values_from = n)
结果
# A tibble: 5 × 4
quadrat A B C
<chr> <dbl> <dbl> <dbl>
1 quad_1 0.2 0.4 0.4
2 quad_2 0.2 0.7 0.1
3 quad_3 0.6 0.3 0.1
4 quad_4 0.2 0.3 0.5
5 quad_5 0.4 0.4 0.2