将因子的 df 转换为宽格式,并包含每个因子的百分比(pivot_wider?)

问题描述 投票:0回答:1

所以我有一个原始数据框,它记录了 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)))

我知道我的样本数据中的值并不准确,但希望您能得到我的目标 - 非常感谢任何帮助!

r pivot
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.