当列表作为列名给出时,格式更改

时间:2019-03-18 09:45:32

标签: r lubridate

我从下面的代码创建了间隔列表。

library(lubridate)    
date1 <- ymd_hms("2000-01-01 05:30:00",tz = "US/Eastern")  
shifts <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date1+days(x)+minutes(y)), (date1+days(x)+minutes(y+z)))
  }, y = c(0,150,390,570,690,810,1050), z = c(600,570,600,600,600,600,600), SIMPLIFY = FALSE)
})

我还有另一个105列的数据集df。

我正在尝试为列名指定班​​次间隔。

但是格式正在改变。我希望列名与班次相同。我正在尝试如下。

list <- unlist(shifts, recursive = FALSE)

colnames(df)<-as.date(list)

1 个答案:

答案 0 :(得分:1)

失败的原因是因为list仍然是interval类型。如果要将interval的内容用作colnames,则需要将它们转换为list个字符,如下所示:

list <- unlist(shifts, recursive = FALSE)
dmy <- list()
for(i in 1:length(list)){
    foo <- c(list[[i]])
    foo <- as.character(foo)
    dmy <- append(dmy, foo)
}
colnames(df) <- dmy # list of characters

输出:

> class(list[[1]])
[1] "Interval"
attr(,"package")
[1] "lubridate"
> class(dmy[[1]])
[1] "character"

现在,您应该能够重命名df的列了:)