我有一个包含830和930两组观测值的数据集。我的目标是重塑我的数据框,以便有一个originID
列,一列830
和一个{{1 }}列,将930
下的值保存在各自的小时列中。它基本上是一个反向重塑。有没有一种快速方法在R中执行此操作以及哪种包最合适?
walking
我从> 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
答案 0 :(得分:0)
尝试tidyr
:
df %>% spread(hour, walking)
我建议您使用dplyr
更改此类数字,这样您就不必处理以数字开头的列名:
df %>%
mutate(hour = paste0('hour_', hour)) %>%
spread(hour, walking)
答案 1 :(得分:0)
您需要使用walking
- 变量作为value.var
:
dcast(df, originId ~ hour, value.var = 'walking')
给出:
originId 830 930
1 229873828 3.519326 3.523732
2 359727104 3.440248 3.029167
3 359727113 3.178191 2.768297
4 359931904 8.065233 8.093116
5 359931908 20.758961 21.234964
6 359931909 15.050358 15.701993
甚至可能更好:
dcast(df, originId ~ paste0('hr_',hour), value.var = 'walking')
给出:
originId hr_830 hr_930
1 229873828 3.519326 3.523732
2 359727104 3.440248 3.029167
3 359727113 3.178191 2.768297
4 359931904 8.065233 8.093116
5 359931908 20.758961 21.234964
6 359931909 15.050358 15.701993