在R中向空数据表添加列

26

对于向现有空的data.table版本1.8.6)添加新列,似乎没有不受警告的方法。

示例:

dt<-old.table[0]
dt[,new_column:=""]

这会产生警告:

In '[.data.table'(dt, , ':='(new_column,"")):    
Supplied 1 items to be assigned to 0 items of column 'new_column' (1 unused)

有没有一种方法可以添加新列而不会收到警告?

2个回答

34

好问题。使用一个空字符向量 (character()),而不是长度为1的字符向量 ("")。

> DT = data.table(a=1:3,b=4:6)
> DT2 = DT[0]
> DT2
Empty data.table (0 rows) of 2 cols: a,b
> DT2[,newcol:=character()]    # no warning
> DT2
Empty data.table (0 rows) of 3 cols: a,b,newcol
> sapply(DT2,class)
          a           b      newcol 
  "integer"   "integer" "character" 

顺便说一句,""[0] 是创建零长度字符向量的另一种方法;比 character() 减少 7 个字符,但可读性可能会降低,具体取决于您的喜好。


那只使用 DT2[,newcol:=NA] 呢?这样可以吗? - skan
1
“NA”不同有两个原因。i)“NA”是类型为“logical”,而不是“character”(“NA_character_”是字符类型),ii)“NA”的长度为1,而不是0。 - Matt Dowle
我想要一个没有数据的列,只是为了在使用xtable打印PDF时将表格分成两部分。这对我来说一样吗? - skan
这里的原始问题是关于空数据(即没有行)。听起来你有一个有数据的表格(nrow>0)。所以你可以使用DT[, spacerCol:=" "]。如果你愿意,你也可以在这样的间隔列上使用空白列名。 - Matt Dowle

8

data.table中添加一个空的字符列,即使它有任意数量的行(包括0),可以按照以下方式进行操作:

DT2[ ,newcol:=character(.N) ]

为什么DT2$newcol=as.character(NA)被赋值为“逻辑型”? - Herman Toothrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接