2015-02-24 80 views
4

我想以適當的方式基於正則表達式重新命名數據表中的每一列。data.table setnames與正則表達式組合

library(data.table) 
DT <- data.table("a_foo" = 1:2, "bar_b" = 1:2) 
    a_foo bar_b 
1:  1  1 
2:  2  2 

我想從名稱中刪去「_foo」和「bar_」。這條經典的線條有訣竅,但它也複製整個表格。

names(DT) <- gsub("_foo|bar_", "", names(DT)) 

如何使用setnames()做同樣的事情?我有很多變量,所以只是寫出所有的名字不是一個選項。

+5

嘗試'setnames(DT,名稱(DT),GSUB( 「_foo | bar_」,「」,名稱(DT)))' – akrun 2015-02-24 16:25:54

+3

@akrun你不需要表達式中的第二個參數 – eddi 2015-02-24 16:28:49

+0

@eddi是的,它應該可以工作,但是我正在關注de定製以避免混淆。 'setnames(x,old,new)' – akrun 2015-02-24 16:30:05

回答

8

你可以嘗試

setnames(DT, names(DT), gsub("_foo|bar_", "", names(DT))) 

基礎上?setnamessetnames(x,old,new)

使用或者作爲@eddi評論

setnames(DT, gsub("_foo|bar_", "", names(DT))) 
+2

不可否認,它乍一看並不明顯,但如果您閱讀'old:'和'new:'下的描述,'new'是可選的,它實際上在'?setnames'中解釋。 – eddi 2015-02-24 16:52:05

+0

@eddi感謝您的評論。是的,我現在讀了它。 – akrun 2015-02-24 16:53:21