我试图融化一个数据框,但我得到了这个奇怪的错误。你知道为什么吗?
str(zx7)
'data.frame': 519 obs. of 5 variables:
$ calday.new: Date, format: "2011-01-03" "2011-01-04" "2011-01-05" "2011-01-06" ...
$ A20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ B20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ C20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ D20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
zx7.melt <- melt(zx7, id=c("calday.new"))
Error in `[<-.ts`(`*tmp*`, ri, value = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, : only replacement of elements is allowed发布于 2013-01-07 15:21:33
我不知道你是如何创建你的结构的,但是当我这样做的时候,它对我来说是有效的
zx7 <- data.frame( calday.new=seq(from = as.Date('2011-01-03'),by=1,length.out=519),
A20=ts(rep(0,519)),
B20=ts(rep(0,519)),
C20=ts(rep(0,519)),
D20=ts(rep(0,519)))我创建了与上面相同的结构:
str(zx7)
'data.frame': 519 obs. of 5 variables:
$ calday.new: Date, format: "2011-01-03" "2011-01-04" "2011-01-05" ...
$ A20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ B20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ C20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...
$ D20 : Time-Series from 1 to 519: 0 0 0 0 0 0 0 0 0 0 ...然后我融化了:
head(melt(zx7, id=c("calday.new")))
calday.new variable value
1 2011-01-03 A20 0
2 2011-01-04 A20 0
3 2011-01-05 A20 0
4 2011-01-06 A20 0
5 2011-01-07 A20 0
6 2011-01-08 A20 0发布于 2013-01-09 16:27:52
问题是,旧的“重塑”包的melt()函数在遇到具有类ts的对象时不知道该如何处理。
因此,您有两个明显的选择(尽管可能还有更多):
在melt()数据之前,先对当前分类为ts的变量执行melt()操作:
zx7b <- zx7 #备份,只是以防万一(Reshape)#注意这是“重塑”,而不是"reshape2“头(melt(zx7b,id=c(”calday.new“))#不起作用#[<-.ts中的错误(\*tmp\*,ri,value = c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0):#只允许替换元素##取消data.frame zx7bsapply(zx7b,is.ts)中相关列的类别<- lapply(zx7bsapply(zx7b,is.ts),未分类)头部(熔化(zx7b,Id=c(“calday.new”)#calday.new变量值#1 2011-01-03 A20 0#2 2011-01-04 A20 0#3 2011-01-05 A20 0#4 2011-01-06 A20 0#5 2011-01-07 A20 0#6 2011-01-08 A20 0
library(reshape2) #请注意,这是reshape2!head( Melt (zx7,id=c(“calday.new”))#熔化原来的data.frame #calday.new变量值#1 2011-01-03 A20 0#2 2011-01-04 A20 0#3 2011-01-05 A20 0#4 2011-01-06 A20 0#5 2011-01-07 A20 0#6 2011-01-08 A20 0
我并没有花时间去做这件事,但是您可以从每个版本的“重塑”包中检查melt()的melt.data.frame方法的代码,并查看差异所在。安装这两个包,然后输入reshape2:::melt.data.frame和reshape:::melt.data.frame查看底层函数。
https://stackoverflow.com/questions/14185928
复制相似问题