在data.table列中命名冲突

时间:2015-04-07 22:42:50

标签: r data.table

> str(tester)
Classes ‘data.table’ and 'data.frame':  6402 obs. of  2419 variables:

$ h1           : int  1 5 6 12 13 16 19 22 26 28 ...
$ joinno       : int  2 6 7 11 12 14 16 17 19 21 ..
$ h1           : int  1 5 6 12 13 16 19 22 26 28 ...
$ joinno       : int  2 6 7 11 12 14 16 17 19 21 ...

有人可以告诉我如何/为什么将这两个对象与相同的列名相结合并不会导致问题?这些实际上恰好是相同的列,所以它有点没有实际意义,但当我对列名称进行子集时,我得到一个单独的值。那么R如何决定我指的是哪一列(大概是第一列)?是否有一种简单/固定的方式来重复删除R中的列?

先谢谢。

1 个答案:

答案 0 :(得分:1)

@Frank是对的。 check.names=TRUE的默认设置为?data.framecheck.names=FALSE的默认设置为?data.table。虽然,在cbind的情况下,它没有发挥作用:

cbind(data.frame(a=1),data.frame(a=2))
cbind(data.table(a=1),data.table(a=2))

......两者都有重复的名字。你可以申请:

names(out) <- make.unique(names(out))

... cbind之后 - 修复它。另一种选择是不使用cbind支持:

data.frame(data.frame(a=1),data.frame(a=2))
data.table(data.table(a=1),data.table(a=2),check.names=TRUE)