如何删除R中data.tables中的重复(按名称)列?

Mar*_*ski 9 r data.table

在使用时读取数据集时fread,我注意到有时候我会得到重复的列名,例如(fread没有check.names参数)

> data.table( x = 1, x = 2)
   x x
1: 1 2
Run Code Online (Sandbox Code Playgroud)

问题是:如果它们具有相同的名称,有没有办法删除2列中的1列?

Ben*_*ker 11

怎么样

dt[,unique(names(dt)),with=FALSE]
Run Code Online (Sandbox Code Playgroud)

?来自?data.table:

j:单列名,列名的单个表达式,列名表达式的'list()',计算结果为'list'的表达式或函数调用(包括'data.frame'和'data.table',它们是'list's,),或(当'with = FALSE')要选择的名称或位置的向量.

这将选择每个名称的第一个匹配项(我不确定您要如何处理此名称).

作为@DavidArenburg在评论上述建议,你可以用check.names=TRUEdata.table()(不过,我没有看到check.names在选项fread()-也许我失去了一些东西).


Aru*_*run 10

with=FALSE将返回您正在选择的列的副本.相反,只需使用:=引用删除那些重复的列.

dt[, which(duplicated(names(dt))) := NULL]
#    x
# 1: 1
Run Code Online (Sandbox Code Playgroud)