[英]Reshaping dataset
我只是想知道您是否可以指導我正確的方向,如何根據特定的標准重整數據集以按小時排列,例如,我有以下示例數據集:
我正在嘗試重塑數據集,使其看起來像這樣:
我該如何進行這種重塑? 非常感謝。
My sample data:
data = structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "Jan-97", class = "factor"), day = c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), hour = c(1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), Value = c(65L, 29L,
31L, 42L, 42L, 52L, 61L, 57L, 55L, 52L, 57L, 46L)), .Names = c("date",
"day", "hour", "Value"), class = "data.frame", row.names = c(NA,
-12L))
這使用了reshape2
包。 我確信可以使用reshape
函數完成此操作,但是我對此並不那么了解。
library("reshape2")
dcast(data, date+day~hour, value.var="Value")
這使
> dcast(data, date+day~hour, value.var="Value")
date day 1 2 3 4
1 Jan-97 1 65 29 31 42
2 Jan-97 2 42 52 61 57
3 Jan-97 3 55 52 57 46
如果您不喜歡該名稱,則可以在以后進行更改。
widedata <- dcast(data, date+day~hour, value.var="Value")
names(widedata)[-(1:2)] <- paste0("hour",names(widedata[-(1:2)]))
如此widedata
是:
> widedata
date day hour1 hour2 hour3 hour4
1 Jan-97 1 65 29 31 42
2 Jan-97 2 42 52 61 57
3 Jan-97 3 55 52 57 46
這可以使用reshape
來解決
reshape(data, idvar=c('date','day'), direction='wide', timevar='hour')
這是在基礎中執行此操作的方法:
reshape(data, timevar = c("hour"), v.names = c("Value"),
idvar = c("date", "day"), direction = "wide")
編輯:像布萊恩使用,如果要保留名稱使用:
names(DF)[-c(1:2)] <- paste0("hour", 1:4)
rownames(DF)<- 1:nrow(DF)
DF
屈服:
date day hour1 hour2 hour3 hour4
1 Jan-97 1 65 29 31 42
2 Jan-97 2 42 52 61 57
3 Jan-97 3 55 52 57 46
使用dplyr
和tidyr
軟件包的更新:
library(tidyr)
library(dplyr)
data %>% mutate(hour=paste0('hour', hour)) %>% spread(hour, Value)
# date day hour1 hour2 hour3 hour4
#1 Jan-97 1 65 29 31 42
#2 Jan-97 2 42 52 61 57
#3 Jan-97 3 55 52 57 46
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.