stack() - 堆叠数据框时如何保留行名称

时间:2016-07-06 19:54:45

标签: r dataframe

我正在尝试堆叠数据框的列并维护行名称。这是一个例子。

tod<-format( seq.POSIXt(as.POSIXct(Sys.Date()), as.POSIXct(Sys.Date()+1), by = "5 min"),
             "%H:%M", tz="GMT")
tod<-tod[1:length(tod)-1]
dat <- data.frame(A = 1:length(tod), B = length(tod):1)
colnames(dat)<-seq(as.Date('2015-05-01'), as.Date('2015-05-02'), by = 'day')

rownames(dat)<-tod

哪个产生

          X2015.05.01 X2015.05.02
00:00           1         288
00:05           2         287
00:10           3         286
00:15           4         285
00:20           5         284
00:25           6         283
然后我跑

dat<-stack(dat)

返回

    values        ind
1      1 2015-05-01
2      2 2015-05-01
3      3 2015-05-01
4      4 2015-05-01
5      5 2015-05-01
6      6 2015-05-01

有没有办法维护行名?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

行名称必须是唯一的,因此无法在tod中复制rownames时间)。

我建议您在堆叠后将tod放入其他列:

new_dat <- stack(dat)
new_dat$tod <- rep(tod, times = ncol(dat))

#  values        ind   tod
#1      1 2015-05-01 00:00
#2      2 2015-05-01 00:05
#3      3 2015-05-01 00:10
#4      4 2015-05-01 00:15
#5      5 2015-05-01 00:20
#6      6 2015-05-01 00:25

如果您仍有疑问,让我们尝试将tod分配给rownames:

rownames(new_dat) <- new_dat$tod
# Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
#   duplicate 'row.names' are not allowed

请参阅?我们收到错误。