根据分组变量的级别拆分数据框的一个变量值
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
如何根据另一个分组变量的级别将一个变量值拆分为数据框的列?
假设我有一个如下所示的数据框
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