首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转换data.table中的列类

转换data.table中的列类
EN

Stack Overflow用户
提问于 2011-10-19 04:53:22
回答 8查看 123.8K关注 0票数 129

我在使用data.table时遇到了一个问题:如何转换列类?下面是一个简单的例子:对于data.frame,我没有问题,对于data.table,我只是不知道如何进行转换:

代码语言:javascript
运行
复制
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)

我是不是遗漏了什么显而易见的东西?

根据Matthew的帖子更新:我之前使用了一个旧版本,但即使在更新到1.6.6 (我现在使用的版本)之后,我仍然收到一个错误。

更新2:假设我想将"factor“类的每一列都转换为"character”列,但事先不知道哪一列属于哪一类。使用data.frame,我可以执行以下操作:

代码语言:javascript
运行
复制
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位)

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7813578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档