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

How to remove duplicated (by name) column in data.tables in R?

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

> data.table( x = 1, x = 2)
   x x
1: 1 2

问题是:如果 2 列具有相同的名称,是否有任何方法可以删除其中的 1 列?

不同的方法:

  1. 索引

    my.data.table <- my.data.table[ ,-2]

  2. 子集

    my.data.table <- subset(my.data.table, select = -2)

  3. 创建唯一名称 如果 1. 和 2. 不理想(例如,当有数百列时)

    setnames(my.data.table, make.names(names = names(my.data.table), unique=TRUE))

  4. 可选地系统化删除 名称符合某些标准的变量(在这里,我们将删除名称以“.X”结尾的所有变量(X 为数字,使用 make.names 时从 2 开始)

    my.data.table <- subset(my.data.table, select = !grepl(pattern = "\.\d$", x = names(my.data.table)))

怎么样

dt[, .SD, .SDcols = unique(names(dt))]

这会选择每个名字的 第一次 出现(我不确定你想如何处理这个)。

正如@DavidArenburg 在上面的评论中所建议的,您可以在 data.table()fread()

中使用 check.names=TRUE

.SDcols 方法将 return 您选择的列的 副本 。相反,只需使用 := 通过引用删除那些重复的列。

dt[, which(duplicated(names(dt))) := NULL]
#    x
# 1: 1