首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新列时,data.table :=不支持逻辑数据类型吗?

添加新列时,data.table :=不支持逻辑数据类型吗?
EN

Stack Overflow用户
提问于 2012-06-20 23:04:28
回答 1查看 239关注 0票数 3

在升级到data.table的最新版本1.8.1 (可在R-forge上获得)后,我遇到了以下问题。在这个版本中,我可以这样做:

代码语言:javascript
复制
DT = data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT
   a b
1: A 4 
2: A 5
3: B 6
4: C 7

DT[ ,newcol := NA]

也就是说,我能够添加一个填充了NAs的新列。现在我收到一个错误,说不支持NA的逻辑类型(实际上DT[ ,newcol := TRUE]也不能工作)。

因此,现在我先添加一个双精度列,然后将其设置为NA或任何我需要的逻辑:

代码语言:javascript
复制
DT[ ,newcol:=1]
a b newcol
1: A 4      1
2: A 5      1
3: B 6      1
4: C 7      1

代码语言:javascript
复制
DT[ ,newcol:=NA]
a b newcol
1: A 4      NA
2: A 5      NA
3: B 6      NA
4: C 7      NA

我想问一下这是不是正确的方法。我想这没什么大不了的。它工作得很好,只是想避免不必要的步骤。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 23:36:51

在这个bug被修复之前(参见Matthew Dowle上面的评论),你可以通过在新的专栏中直接指定你想要的NA的类型来绕过它(当然,除了"logical",这是目前不起作用的类型):

代码语言:javascript
复制
DT <- data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT[ ,newcol := NA_real_]  ## Other options are NA_integer_ and NA_character_ 
#    a b newcol
# 1: A 4     NA
# 2: A 5     NA
# 3: B 6     NA
# 4: C 7     NA

## Plain old NA has type and class "logical", partly explaining the 
## error message returned by DT[,newcol:=NA]
c(typeof(NA), class(NA))
# [1] "logical" "logical"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11122436

复制
相关文章

相似问题

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