我正在尝试使用chron类融化数据框

library(chron)
x = data.frame(Index = as.chron(c(15657.00,15657.17)), Var1 = c(1,2), Var2 = c(9,8))
x
                Index Var1 Var2
1 (11/13/12 00:00:00)    1    9
2 (11/13/12 04:04:48)    2    8

y = melt(x,id.vars="Index")
Error in data.frame(ids, variable, value, stringsAsFactors = FALSE) :
  arguments imply differing number of rows: 2, 4


我可以用as.numeric()欺骗,如下所示:

x$Index= as.numeric(x$Index)
y = melt(x,id.vars="Index")
y$Index = as.chron(y$Index)
y
                Index variable value
1 (11/13/12 00:00:00)     Var1     1
2 (11/13/12 04:04:48)     Var1     2
3 (11/13/12 00:00:00)     Var2     9
4 (11/13/12 04:04:48)     Var2     8


但这会更简单吗? (我想保留chron课)

最佳答案

(1)我假设您在运行显示的代码之前发出了以下命令:

library(reshape2)


在这种情况下,您可以改用重塑包装。它不会导致此问题:

library(reshape)


其他解决方案是

(2)使用R的reshape函数:

reshape(direction = "long", data = x, varying = list(2:3), v.names = "Var")


(3)或将chron列转换为数字,请使用reshape2包中的melt然后转换回:

library(reshape2)
xt <- transform(x, Index = as.numeric(Index))
transform(melt(xt, id = 1), Index = chron(Index))


添加了其他解决方案。

10-04 23:19