問題
你想要給數(shù)據(jù)框的列重新命名。
方案
讓我們從有三列的一個(gè)數(shù)據(jù)框開始:
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
d
#> alpha beta gamma
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
names(d)
#> [1] "alpha" "beta" "gamma"
最簡單的方式是使用plyr包的rename()
函數(shù):
library(plyr)
rename(d, c("beta"="two", "gamma"="three"))
#> alpha two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
如果你不想要依賴plyr包,你可以使用下面R內(nèi)置的函數(shù)。注意這些直接修改了d
判导,意味著你不需要把結(jié)果保存回d
夭谤。
# 通過name函數(shù)重命名列:把"beta"改為"two"
names(d)[names(d)=="beta"] <- "two"
d
#> alpha two gamma
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# 你也可以通過位置索引改變名字,但這種操作會(huì)有點(diǎn)危險(xiǎn)螃成,一旦你以后對數(shù)據(jù)做出改變,這些操作可能就不適用了查坪。
# 通過名字向量的位置索引重命名:改變第三項(xiàng)寸宏,將"gamma"改成"three"
names(d)[3] <- "three"
d
#> alpha two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
也可以使用R的字符串搜索和替換函數(shù)來重命名列。注意alpha
周圍的^
和$
是確保全部字符串匹配偿曙。沒有他們的話氮凝,如果存在一個(gè)叫alphabet
的列也會(huì)匹配成功。
names(d) <- sub("^alpha$", "one", names(d))
d
#> one two three
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# 所有的列中望忆,替換列名中的"t"為"X"
names(d) <- gsub("t", "X", names(d))
d
#> one Xwo Xhree
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# gsub()替換每個(gè)列名中所有的匹配項(xiàng)
# sub()只替換每個(gè)列名中匹配的第一項(xiàng)