我在使用data.table时遇到问题:如何转换列类?这是一个简单的例子:使用data.frame我没有转换它的问题,data.table我只是不知道如何:
df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
#One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
#Another way
df[, "value"] <- as.numeric(df[, "value"])
library(data.table)
dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE)
#Error in rep("", ncol(xi)) : invalid 'times' argument
#Produces error, does data.table not have the option stringsAsFactors?
dt[, "ID", with=FALSE] <- as.character(dt[, "ID", with=FALSE])
#Produces error: Error in `[<-.data.table`(`*tmp*`, , "ID", with = FALSE, value = "c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)") :
#unused argument(s) (with = FALSE)
我想念一些明显的东西吗?
由于马修的帖子更新:之前我使用过旧版本,但即使在更新到1.6.6(我现在使用的版本)之后,我仍然会收到错误 .
更新2:假设我想将类“factor”的每一列转换为“character”列,但事先并不知道哪个列属于哪个类 . 使用data.frame,我可以执行以下操作:
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
我可以用data.table做类似的事情吗?
更新3:
sessionInfo()R版本2.13.1(2011-07-08)平台:x86_64-pc-mingw32 / x64(64位)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.6
loaded via a namespace (and not attached):
[1] tools_2.13.1
7 回答
如果data.table中有列名列表,则需要更改do的类:
试试这个
这是一个很糟糕的方法!我很有 Value 来记录这种困难的方式 . 另外,这是
eval
substitute
语法的一个很好的语法示例 .给你的
尝试:
我尝试了几种方法 .
或者其他
我提供了更通用,更安全的方法来做这些事情,
函数
..
确保我们得到一个超出data.table范围的变量; set_colclass将设置cols的类 . 你可以像这样使用它:对于单个列:
使用
lapply
和as.character
: