在R中扩展数据集时出错
我有一个很长的数据集,按地理位置和年份分类,大约有5个感兴趣的变量(见structure blow),每次我尝试将其转换为广域形式时,我都会被告知存在重复,因此无法复制在R中扩展数据集时出错,r,dataframe,reshape,R,Dataframe,Reshape,我有一个很长的数据集,按地理位置和年份分类,大约有5个感兴趣的变量(见structure blow),每次我尝试将其转换为广域形式时,我都会被告知存在重复,因此无法复制 df Yr Geo Obs1 Obs2 2001 Dist1 1 3 2002 Dist1 2 5 2003 Dist1 4 2 2004 Dist1 2 1 2001 Dist2 1 3
df
Yr Geo Obs1 Obs2
2001 Dist1 1 3
2002 Dist1 2 5
2003 Dist1 4 2
2004 Dist1 2 1
2001 Dist2 1 3
2002 Dist2 .9 5
2003 Dist2 6 8
2004 Dist2 2 .2
我想把它转换成这样的东西
yr dist1obs1 dist1obs2 dist2obs1 dist2obs2
2001
2002
2003
2004
找像这样的东西
> reshape(df, v.names= c("Obs1", "Obs2"), idvar="Yr", timevar ="Geo", direction="wide")
Yr Obs1.Dist1 Obs2.Dist1 Obs1.Dist2 Obs2.Dist2
1 2001 1 3 1.0 3.0
2 2002 2 5 0.9 5.0
3 2003 4 2 6.0 8.0
4 2004 2 1 2.0 0.2
下面是一个使用
tidyr
的解决方案。由于spread
使用一个键值对,因此需要首先收集Obs
并将dist
与之联合起来,以便有一个键值对可以使用。我还将列名设置为小写,如请求的输出所示。
库(tidyverse)
待定%
聚集(“obsnum”、“obs”、Obs1、Obs2)%
unite(colname、Geo、obsnum、sep=“”)%>%
排列(colname,obs)%>%
`colnames#A tible:4 x 5
#>年份区1 BS1区1 BS2区2 BS1区2 BS2
#>
#> 1 2001 1. 3.1.00 3.00
#> 2 2002 2. 5.0.900 5.00
#> 3 2003 4. 2.6.00 8.00
#> 4 2004 2. 1.2.00 0.200
由(v0.2.0)于2018-04-19创建。您的预期输出对我来说不清楚,请详细说明。@JilberUrbina似乎希望它采用宽格式,并在列名中加入值。