在 R 中使用 reshape 函数,常量变量变化
Using reshape function in R, with constant variables varying
我想使用宽格式 R 中的重塑功能来分析三年多的气象站记录的天气数据:1996 年、2006 年和 2016 年。
我手动组合了长格式的三个数据集,但一些变量,如经度和纬度,不应该从一年到另一年变化。但是有些不一样。
我收到警告:当我应用重塑时,一些常量变量(Nom、Lat、Long)确实在变化,这是预期的。
在这种情况下,目标是让这些变量在生成的宽格式中包含 2016 年观察到的值。
注:并非所有三年都有气象站。
这是一个例子:
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
现在使用重塑进入宽幅面:
dfw <- reshape(df, direction = "wide", timevar = "year",
idvar = "id", v.names = "pos")
Warning message:
In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying, :
some constant variables (name) are really 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
我得到了我需要的:pos 随时间变化。
我的问题是:在 2002 年,id 为 5、6 和 7 的观测值分别具有名称 e、f 和 g。然而在 2005 年,它们分别有了 r、t 和 y。宽格式 table dfw 显示 2002 年给出的名字
我希望重塑函数中的结果显示 2005 年为此类观察定义的名称。
reshape函数有什么要修改的吗?也许在另一个包裹里?
请注意,这是两个单独的 table,最初是每年一个,并且是手动组合的,因此在组合之前是否可以进行修改?
合并不同年份的两个数据框时,2005 年的 table 应放在开头。这样 R 就采用了为 2005 年定义的第一个配置。
我想使用宽格式 R 中的重塑功能来分析三年多的气象站记录的天气数据:1996 年、2006 年和 2016 年。
我手动组合了长格式的三个数据集,但一些变量,如经度和纬度,不应该从一年到另一年变化。但是有些不一样。
我收到警告:当我应用重塑时,一些常量变量(Nom、Lat、Long)确实在变化,这是预期的。
在这种情况下,目标是让这些变量在生成的宽格式中包含 2016 年观察到的值。
注:并非所有三年都有气象站。
这是一个例子:
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
现在使用重塑进入宽幅面:
dfw <- reshape(df, direction = "wide", timevar = "year",
idvar = "id", v.names = "pos")
Warning message: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying, : some constant variables (name) are really 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
我得到了我需要的:pos 随时间变化。
我的问题是:在 2002 年,id 为 5、6 和 7 的观测值分别具有名称 e、f 和 g。然而在 2005 年,它们分别有了 r、t 和 y。宽格式 table dfw 显示 2002 年给出的名字
我希望重塑函数中的结果显示 2005 年为此类观察定义的名称。
reshape函数有什么要修改的吗?也许在另一个包裹里?
请注意,这是两个单独的 table,最初是每年一个,并且是手动组合的,因此在组合之前是否可以进行修改?
合并不同年份的两个数据框时,2005 年的 table 应放在开头。这样 R 就采用了为 2005 年定义的第一个配置。