使用tidyr在R中彻底重组数据帧
我有一个由植被数据组成的数据框架。列为物种名称,行为每个地点的相对丰度。站点、绘图代码和年份也是变量。数据如下所示:使用tidyr在R中彻底重组数据帧,r,datatable,tidyverse,tidyr,R,Datatable,Tidyverse,Tidyr,我有一个由植被数据组成的数据框架。列为物种名称,行为每个地点的相对丰度。站点、绘图代码和年份也是变量。数据如下所示: Site Code Year speca specb specc A A1 2001 0 1 10 A A2 2001 5 5 15 B B1 2001 0 5 20 B B1 2004 15 75 0 C C1 2006 50 0
Site Code Year speca specb specc
A A1 2001 0 1 10
A A2 2001 5 5 15
B B1 2001 0 5 20
B B1 2004 15 75 0
C C1 2006 50 0 15
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
speca 0 5 0 15 50
specb 1 5 5 75 0
specc 10 15 20 0 15
我希望datatable如下所示:
Site Code Year speca specb specc
A A1 2001 0 1 10
A A2 2001 5 5 15
B B1 2001 0 5 20
B B1 2004 15 75 0
C C1 2006 50 0 15
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
speca 0 5 0 15 50
specb 1 5 5 75 0
specc 10 15 20 0 15
我尝试使用tidyr:pivot\u longer函数,但这并没有给出我想要的结果
tidyr::pivot_longer(df, 4:length(df), names_to = "species", values_to = "abundance")
有没有一种方法可以以代码友好的方式实现这一点,最好是使用tidyr tidyverse?我们将其重塑为“长”格式,然后使用pivot\u wide执行“宽”格式 数据
我们将其重塑为“长”格式,然后使用pivot_加宽进行“宽”格式 数据 在data.table中:
library(data.table)
DT <- data.table(Site = c('A1','A2','B1','B1','C1'),
Year = c(2001, 2001, 2001, 2004, 2006),
speca = c(0,5,0,15,50),
specb = c(1,5,5,75,0),
specc = c(10,15,20,0,15))
DT <- melt(DT, id.vars = c('Site', 'Year'),
measure.vars = c('speca', 'specb', 'specc') , variable.name = 'species')
DT <- dcast(DT, species ~ Site + Year, value.var = c('value'))
> DT
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
1: speca 0 5 0 15 50
2: specb 1 5 5 75 0
3: specc 10 15 20 0 15
在data.table中:
library(data.table)
DT <- data.table(Site = c('A1','A2','B1','B1','C1'),
Year = c(2001, 2001, 2001, 2004, 2006),
speca = c(0,5,0,15,50),
specb = c(1,5,5,75,0),
specc = c(10,15,20,0,15))
DT <- melt(DT, id.vars = c('Site', 'Year'),
measure.vars = c('speca', 'specb', 'specc') , variable.name = 'species')
DT <- dcast(DT, species ~ Site + Year, value.var = c('value'))
> DT
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
1: speca 0 5 0 15 50
2: specb 1 5 5 75 0
3: specc 10 15 20 0 15
你主要需要一个更宽的支点来跟随你的支点:
图书馆管理员
df%
mutateCode=pasteCode,年份,sep=\u%>%
选择站点,-Year%>%
pivot_longerstarts_与spec、name_to=物种、value_to=丰度%>%
pivot\u widernames\u from=代码,value\u from=丰度
结果是
# A tibble: 3 x 6
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 speca 0 5 0 15 50
2 specb 1 5 5 75 0
3 specc 10 15 20 0 15
你主要需要一个更宽的支点来跟随你的支点:
图书馆管理员
df%
mutateCode=pasteCode,年份,sep=\u%>%
选择站点,-Year%>%
pivot_longerstarts_与spec、name_to=物种、value_to=丰度%>%
pivot\u widernames\u from=代码,value\u from=丰度
结果是
# A tibble: 3 x 6
species A1_2001 A2_2001 B1_2001 B1_2004 C1_2006
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 speca 0 5 0 15 50
2 specb 1 5 5 75 0
3 specc 10 15 20 0 15
如此优雅,但也显而易见。遗憾的是,我整个晚上都在努力实现这一目标,却没有任何结果;完全错过了这个。非常感谢你!如此优雅,但也显而易见。遗憾的是,我整个晚上都在努力实现这一目标,却没有任何结果;完全错过了这个。非常感谢你!