R 重塑数据集
我只是想知道,您是否可以指导我如何根据特定标准重塑数据集以按小时排列,例如,我有以下示例数据集: 我正在尝试将数据集重塑为如下所示: 请问,我如何进行此整形?非常感谢R 重塑数据集,r,R,我只是想知道,您是否可以指导我如何根据特定标准重塑数据集以按小时排列,例如,我有以下示例数据集: 我正在尝试将数据集重塑为如下所示: 请问,我如何进行此整形?非常感谢 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, 1
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))
这将使用
重塑2
包。我确信通过重塑
功能可以做到这一点,但我不太容易做到这一点
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)]))
这将使用
重塑2
包。我确信通过重塑
功能可以做到这一点,但我不太容易做到这一点
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)]))
这可以使用
重塑
reshape(data, idvar=c('date','day'), direction='wide', timevar='hour')
这可以使用重塑
reshape(data, idvar=c('date','day'), direction='wide', timevar='hour')
这是在base中执行此操作的一种方法:
reshape(data, timevar = c("hour"), v.names = c("Value"),
idvar = c("date", "day"), direction = "wide")
编辑:如Brian所用,如果要保留名称,请使用:
names(DF)[-c(1:2)] <- paste0("hour", 1:4)
rownames(DF)<- 1:nrow(DF)
DF
这是在base中执行此操作的一种方法:
reshape(data, timevar = c("hour"), v.names = c("Value"),
idvar = c("date", "day"), direction = "wide")
编辑:如Brian所用,如果要保留名称,请使用:
names(DF)[-c(1:2)] <- paste0("hour", 1:4)
rownames(DF)<- 1:nrow(DF)
DF
使用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
使用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
+我还在打字。重塑
包和铸造
将执行相同的操作<代码>演员阵容(数据,日期+天~小时,value='value')
感谢Brian和Justin,这正是我想要了解如何重塑的原因。再次感谢,问候,#+1我还在打字。重塑
包和铸造
将执行相同的操作<代码>演员阵容(数据,日期+天~小时,value='value')
感谢Brian和Justin,这正是我想要了解如何重塑的原因。再次感谢,尊敬,#感谢Smu的回答,第一个更适合我正在寻找的内容,但感谢您尝试帮助我:)感谢Smu的回答,第一个更适合我正在寻找的内容,但感谢您尝试帮助我:)如果要更改列名,library(dplyr);数据%>%变异(hour=paste0('hour',hour))%%>%spread(hour,Value))
或者只使用spread(data,hour,Value)%%>%setNames(,c(names(.)[1:2],paste0('hour',names(.)[3:6])
@akrun看起来好多了。我将浏览其他示例,并练习宽范围和长范围的重塑;数据%>%变异(hour=paste0('hour',hour))%%>%spread(hour,Value))
或者只使用spread(data,hour,Value)%%>%setNames(,c(names(.)[1:2],paste0('hour',names(.)[3:6])
@akrun看起来好多了。我将学习其他示例,并练习宽和长整形。