首页 > 解决方案 > 根据分组变量的级别拆分数据帧的一个变量值

问题描述

如何根据另一个分组变量的级别将一个变量值拆分为数据框的列?

假设我有一个如下所示的数据框

Site Species dbh
1    sp1     2.8
1    sp2     2.2
2    sp1     4.0
2    sp2     1.5
3    sp1     3.9
3    sp2     2.5

我想得到如下输出,其中分组变量(物种)的级别成为数据框的列,dbh 值作为分组变量每个级别的值。

Site sp1  sp2
1    2.8  2.2
2    4.0  1.5
3    3.9  2.5

我将感谢您的宝贵建议。

问候,

法尔汉

标签: rdataframedplyrsplitmultiple-columns

解决方案


这被称为“重塑”或“枢轴”。有数百个教程和关于它的 SO 问题。

dat <- read.table(header = TRUE, text = "
Site Species dbh
1    sp1     2.8
1    sp2     2.2
2    sp1     4.0
2    sp2     1.5
3    sp1     3.9
3    sp2     2.5")

tidyverse

library(tidyr)

dat %>% pivot_wider(values_from = "dbh", names_from = "Species")
#> # A tibble: 3 x 3
#>    Site   sp1   sp2
#>   <int> <dbl> <dbl>
#> 1     1   2.8   2.2
#> 2     2   4     1.5
#> 3     3   3.9   2.5

data.table

library(data.table)
setDT(dat)

dcast(dat, Site ~ Species)
#> Using 'dbh' as value column. Use 'value.var' to override
#>    Site sp1 sp2
#> 1:    1 2.8 2.2
#> 2:    2 4.0 1.5
#> 3:    3 3.9 2.5

推荐阅读