我正在尝试堆叠数据框的列并维护行名称。这是一个例子。
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
有没有办法维护行名?
感谢您的帮助。
答案 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
请参阅?我们收到错误。