簡體   English   中英

如何刪除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 列?

怎么樣

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

這將選擇每個名稱的第一次出現(我不確定您想如何處理)。

正如@DavidArenburg 在上面的評論中所建議的那樣,您可以在data.table()fread()使用check.names=TRUE

.SDcols方法將返回您選擇的列的副本 相反,只需使用:=通過引用刪除那些重復的列。

dt[, which(duplicated(names(dt))) := NULL]
#    x
# 1: 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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM