在R中扩展数据集时出错

在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

我有一个很长的数据集,按地理位置和年份分类,大约有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     
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似乎希望它采用宽格式,并在列名中加入值。