【发布时间】:2017-06-16 15:20:52
【问题描述】:
我想在 R 中使用宽格式的 reshape 函数来分析从 1996 年、2006 年和 2016 年三个站点记录的天气数据。
我已经手动组合了三个长格式的数据集,但是经度和纬度等一些变量不应该在一年之间变化。但是有些不同。
我收到警告:当我应用 reshape 时,一些常量变量 (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
现在使用 reshape 转到宽格式:
dfw <- reshape(df, direction = "wide", timevar = "year",
idvar = "id", v.names = "pos")
警告信息: 在 reshapeWide(data, idvar = idvar, timevar = timevar, 变化 = 变化, : 一些常量变量(名称)确实在变化
> 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 年,id 为 5、6 和 7 的观察具有各自的名称 e、f 和 g。然而,在 2005 年,它们有了各自的名称 r、t 和 y。宽格式表 dfw 显示了 2002 年给出的名称
我希望 reshape 函数中的结果显示 2005 年为此类观察定义的名称。
reshape 函数有什么需要修改的吗?也许在另一个包里?
请注意,这是两个单独的表格,最初是每年一个,并且是手动合并的,所以也许可以在合并之前进行修改?
【问题讨论】:
-
欢迎来到 StackOverflow!请阅读有关how to ask a good question 以及如何提供reproducible example 的信息。这将使其他人更容易帮助您。
-
@Jaap 感谢您的耐心等待,希望这些修改可以帮助您更好地理解问题。