Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tidyr在R中彻底重组数据帧_R_Datatable_Tidyverse_Tidyr - Fatal编程技术网

使用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

如此优雅,但也显而易见。遗憾的是,我整个晚上都在努力实现这一目标,却没有任何结果;完全错过了这个。非常感谢你!如此优雅,但也显而易见。遗憾的是,我整个晚上都在努力实现这一目标,却没有任何结果;完全错过了这个。非常感谢你!