簡體   English   中英

重塑數據集

[英]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

使用dplyrtidyr軟件包的更新:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM