将数据集转换为R中的列和行组合的整洁格式
我有一个数据集,它的结构有点糟糕:将数据集转换为R中的列和行组合的整洁格式,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个数据集,它的结构有点糟糕: Species site 2001 2002 2003 a 1 0 1 4 a 2 1 1 0 a 3 5 5 5 b 1 3 0 4 b 2 1 1 1 b 3 4 5 5 在用R尝试了几个小时
Species site 2001 2002 2003
a 1 0 1 4
a 2 1 1 0
a 3 5 5 5
b 1 3 0 4
b 2 1 1 1
b 3 4 5 5
在用R尝试了几个小时以正确的格式获得它之后,我在Excel中完成了它,并将它转换为下面的格式
ID a b
1_2001 0 3
1_2002 1 0
1_2003 4 4
2_2001 1 1
2_2002 1 1
2_2003 0 1
3_2001 5 4
3_2002 5 5
3_2004 5 5
原始的数据集相当大,我不能让它休息,我不知道如何在R中快速完成。
有人能给我解释一下如何在R中实现这一转换吗?使用tidyr和dplyr,您可以首先将我们的年份列重塑为更长的格式,然后使用pivot_更广泛地创建a和b列,组装站点和ID,最后只保留所需的列:
图书馆三年
图书馆弹琴
df%>%pivot\u更长,-cSpecies,site,name\u to=ID,value\u to=val%>%
pivot_加宽,name_from=物种,value_from=val%>%
行%>%
mutateID=粘贴站点,ID,sep=\%>%
selectID,a,b
来源:本地数据帧[9 x 3]
组:
一个tibble:9x3
身份证
1 1_2001 0 3
2 1_2002 1 0
3 1_2003 4 4
4 2_2001 1 1
5 2_2002 1 1
6 2_2003 0 1
7 3_2001 5 4
8 3_2002 5 5
9 3_2003 5 5
资料
structurelistSpecies=ca,a,a,b,b,b,site=c1L,
2L,3L,1L,2L,3L,`2001`=c0L,1L,5L,3L,1L,4L,`2002`=c1L,
1L,5L,0L,1L,5L,`2003`=c4L,0L,5L,4L,1L,5L,row.NAME=cNA,
-6L,class=cdata.table,data.frame,.internal.selfref=
使用tidyr和dplyr,您可以首先将我们的年份列重新塑造为更长的格式,然后使用pivot_更宽的范围创建a和b列,组装站点和ID,最后只保留所需的列:
图书馆三年
图书馆弹琴
df%>%pivot\u更长,-cSpecies,site,name\u to=ID,value\u to=val%>%
pivot_加宽,name_from=物种,value_from=val%>%
行%>%
mutateID=粘贴站点,ID,sep=\%>%
selectID,a,b
来源:本地数据帧[9 x 3]
组:
一个tibble:9x3
身份证
1 1_2001 0 3
2 1_2002 1 0
3 1_2003 4 4
4 2_2001 1 1
5 2_2002 1 1
6 2_2003 0 1
7 3_2001 5 4
8 3_2002 5 5
9 3_2003 5 5
资料
structurelistSpecies=ca,a,a,b,b,b,site=c1L,
2L,3L,1L,2L,3L,`2001`=c0L,1L,5L,3L,1L,4L,`2002`=c1L,
1L,5L,0L,1L,5L,`2003`=c4L,0L,5L,4L,1L,5L,row.NAME=cNA,
-6L,class=cdata.table,data.frame,.internal.selfref=
这里是另一个从tidyr软件包收集和传播的解决方案: 输出:
# A tibble: 9 x 4
site key a b
<int> <chr> <int> <int>
1 1 2001 0 3
2 1 2002 1 0
3 1 2003 4 4
4 2 2001 1 1
5 2 2002 1 1
6 2 2003 0 1
7 3 2001 5 4
8 3 2002 5 5
9 3 2003 5 5
这里是另一个从tidyr软件包收集和传播的解决方案: 输出:
# A tibble: 9 x 4
site key a b
<int> <chr> <int> <int>
1 1 2001 0 3
2 1 2002 1 0
3 1 2003 4 4
4 2 2001 1 1
5 2 2002 1 1
6 2 2003 0 1
7 3 2001 5 4
8 3 2002 5 5
9 3 2003 5 5