在使用时读取数据集时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=TRUE在data.table()(不过,我没有看到check.names在选项fread()-也许我失去了一些东西).
Aru*_*run 10
with=FALSE将返回您正在选择的列的副本.相反,只需使用:=引用删除那些重复的列.
dt[, which(duplicated(names(dt))) := NULL]
# x
# 1: 1
Run Code Online (Sandbox Code Playgroud)