【发布时间】:2017-11-20 07:29:26
【问题描述】:
这更像是一个有趣的问题,因为我找到了一种解决方法,尽管我觉得它并不漂亮。
当我更新 pander 包(到 0.6.1)时,每当我尝试在从 data.table(包版本 1.10. 4-3 或更早)使用 data.table::dcast() 的长格式:
data.table::setattr(x, "row.names", row.names.dt) 中的错误: 行名必须是“字符”或“整数”,而不是“双精度”
我尝试删除任何行名,但无济于事。经过一番研究,我发现使用 reshape2::dcast 没有错误,但是 reshape2::dcast 将 data.table 转换为 data.frame,这不是我想要的。当然,我可以将 data.frame 转换回 data.table。
这是一些对我产生错误的示例代码:
library(pander)
library(data.table)
dt.long <- data.table(time=c(1, 1, 2, 2), T=c("c", "t", "c", "t"), count=c(10, 15, 15, 20))
pander(dt.long) # this works fine
dt.wide <- dcast(dt.long, time~T, value.var = "count")
row.names(dt.wide) <- NULL # doesn't help
row.names(dt.wide) <- c() # doesn't help either
pander(dt.wide) # produces error
# work-around
library(reshape2)
dt.wide <- dcast(dt.long, time~T, value.var = "count")
pander(dt.wide) # works fine
class(dt.wide) # but this is a data.frame
dt.wide <- data.table(dt.wide) # now it is a data.table again
有没有一种简单的方法可以将数据保存为 data.table 并像以前一样使用 pander?
我使用 R 版本 3.3.2,以防万一。
提前谢谢你!
【问题讨论】:
标签: r data.table pander dcast