根据分组变量的级别拆分数据框的一个变量值

Split one variable values of data frame according to levels of grouping variable

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

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

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

非常感谢您的宝贵建议。

此致,

法汉

这被称为“重塑”或“枢轴”。有数百个教程和 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

如果你使用的是 base R

,请尝试 reshape
reshape(
  df,
  direction = "wide",
  idvar = "Site",
  timevar = "Species"
)

这给出了

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