【发布时间】:2016-06-21 15:06:25
【问题描述】:
我有一个数据集,其中包含 830 和 930 的两组观察值。我的目标是重塑我的数据框,以便有一个 originID 列、一个 830 列和一个 930 列,保持walking 下的值在各自的小时列中。它基本上是一个反向重塑。在 R 中有没有一种快速的方法可以做到这一点,什么包最合适?
> df
originId walking hour
1 359727104 3.440248 830
2 359931904 8.065233 830
3 229873828 3.519326 830
4 359931908 20.758961 830
5 359931909 15.050358 830
6 359727113 3.178191 830
1063 359727104 3.029167 930
1064 359931904 8.093116 930
1065 229873828 3.523732 930
1066 359931908 21.234964 930
1067 359931909 15.701993 930
1068 359727113 2.768297 930
我已经从reshape2 尝试过这个公式,但它没有产生正确的结果。
> dcast(df, formula = originId + walking ~ hour)
Using hour as value column: use value.var to override.
originId walking 830 930
1 229873828 3.519326 830 NA
2 229873828 3.523732 NA 930
3 359727104 3.029167 NA 930
4 359727104 3.440248 830 NA
5 359727113 2.768297 NA 930
6 359727113 3.178191 830 NA
7 359931904 8.065233 830 NA
8 359931904 8.093116 NA 930
9 359931908 20.758961 830 NA
10 359931908 21.234964 NA 930
11 359931909 15.050358 830 NA
12 359931909 15.701993 NA 930
以下是数据示例:
> dput(df)
structure(list(originId = c(359727104, 359931904, 229873828,
359931908, 359931909, 359727113, 359727104, 359931904, 229873828,
359931908, 359931909, 359727113), walking = c(3.44024822695035,
8.06523297491039, 3.51932624113475, 20.7589605734767, 15.0503584229391,
3.1781914893617, 3.02916666666667, 8.09311594202899, 3.52373188405797,
21.2349637681159, 15.7019927536232, 2.76829710144928), hour = c(830L,
830L, 830L, 830L, 830L, 830L, 930L, 930L, 930L, 930L, 930L, 930L
)), .Names = c("originId", "walking", "hour"), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 1063L, 1064L, 1065L, 1066L, 1067L, 1068L), class = "data.frame")
【问题讨论】:
-
你需要使用
walking变量作为你的value.var:dcast(df, formula = originId ~ hour, value.var = 'walking')