2015-02-24 51 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