在R中使用重塑函数,常数变量变化

时间:2017-01-31 08:58:44

标签: r reshape reshape2 tidyr

我想在R中使用宽幅格式的重塑功能来分析三年来从车站注意到的天气数据:1996年,2006年和2016年。

我已经手动组合了长格式的三个数据集,但是一些变量(例如经度和纬度)不应该从一年到另一年变化。但有些是不同的。

我收到警告:当我应用reshape时,一些常量变量(Nom,Lat,Long)实际上是变化的,这是预期的。

在这种情况下,目标是让这些变量以最终格式包含2016年观察到的值。

注意:三年内气象站并非都存在。

here is an example:
>a=c(rep(2,4),rep(4,3))
>b=c(rep(2,3),5,rep(4,3),4,5,3)
>c=c(1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,10)
>name=c('a','b','c','d','e','f','g','a','b',
'c','d','r','t','y','u','q','z')
>year=c(rep(2002,7),rep(2005,10))
>df=cbind(id=c,pos=c(a,b),year,name)
>df=as.data.frame(df)

df如下:

> df
   id pos year name
1   1   2 2002    a
2   2   2 2002    b
3   3   2 2002    c
4   4   2 2002    d
5   5   4 2002    e
6   6   4 2002    f
7   7   4 2002    g
8   1   2 2005    a
9   2   2 2005    b
10  3   2 2005    c
11  4   5 2005    d
12  5   4 2005    r
13  6   4 2005    t
14  7   4 2005    y
15  8   4 2005    u
16  9   5 2005    q
17 10   3 2005    z

现在使用reshape转到宽格式:

>dfw<-reshape(df,direction="wide",timevar="year",
idvar="id",v.names="pos")

警告讯息: 在reshapeWide中(data,idvar = idvar,timevar = timevar,vary = varying,:   一些常量变量(名称)实际上是变化的

> dfw
   id name pos.2002 pos.2005
1   1    a        2        2
2   2    b        2        2
3   3    c        2        2
4   4    d        2        5
5   5    e        4        4
6   6    f        4        4
7   7    g        4        4
15  8    u     <NA>        4
16  9    q     <NA>        5
17 10    z     <NA>        3

我得到了我需要的东西:随着时间的推移而变化。

我的问题是:在2002年,身份5,6和7的观察具有相应的名称e,f和g。然而在2005年,它们分别具有名称r,t和y。宽格式表dfw显示2002年给出的名称

我希望重塑函数中的结果显示2005年为此类观察定义的名称。

重塑功能中有什么要修改的吗?也许在另一个包里?

请注意,这些是两个独立的表,最初每年一个,并且是手动组合的,所以也许在组合之前可以进行修改?

1 个答案:

答案 0 :(得分:0)

将两个数据框合并为不同年份时,应将2005年表放在开头。这样,R采用了为2005年定义的第一个配置。