2016-11-01 28 views
2

我已經通過常見的行名稱合併了兩個數據框,並且合併工作正常,但我在每個列名稱前獲得了一個x。如何在合併後的列名稱中刪除X

如何從每個列標題中刪除X?

z<- merge(p, y, by='ID') 
head(z) 

    ID   x  y V1 X198101 X198102 X198103 X198104 X198105 X198106 
1 410320 -122.5417 37.75 NA 119.45 33.15 104.23 5.61 4.85  0  
2 410321 -122.5000 37.75 NA 129.49 37.76 114.94 5.28 5.24  0  
3 410322 -122.4583 37.75 NA 163.68 42.80 131.22 7.25 6.94  0  
4 410323 -122.4167 37.75 NA 141.14 32.26 110.45 7.77 4.62  0  
5 410324 -122.3750 37.75 NA 130.87 25.87 102.15 8.38 4.13  0  
6 410325 -122.3333 37.75 NA 129.03 25.21 102.37 9.42 4.35  0  

謝謝!

回答

2

最好讓列名不以數字開頭。默認情況下,make.namesmake.unique在以數字開頭時添加前綴X。要刪除它,一種選擇是sub

names(z) <- sub("^X", "", names(z)) 
z 
#  ID   x  y V1 198101 198102 198103 198104 198105 198106 
#1 410320 -122.5417 37.75 NA 119.45 33.15 104.23 5.61 4.85  0 
#2 410321 -122.5000 37.75 NA 129.49 37.76 114.94 5.28 5.24  0 
#3 410322 -122.4583 37.75 NA 163.68 42.80 131.22 7.25 6.94  0 
#4 410323 -122.4167 37.75 NA 141.14 32.26 110.45 7.77 4.62  0 
#5 410324 -122.3750 37.75 NA 130.87 25.87 102.15 8.38 4.13  0 
#6 410325 -122.3333 37.75 NA 129.03 25.21 102.37 9.42 4.35  0 

如果我們將make.names

make.names(names(z)) 
#[1] "ID"  "x"  "y"  "V1"  "X198101" "X198102" 
#[7] "X198103" "X198104" "X198105" "X198106" 

返回的 'X' 前綴。所以,一般來說,使用'字符'前綴代替數字是安全的。此外,如果我們想要提取'198101'列,我們需要反駁

z$198104 
#Error: unexpected numeric constant in "z$198104" 
z$`198104` 
#[1] 5.61 5.28 7.25 7.77 8.38 9.42 
+1

太棒了,就是這樣。列名是日期(年和月),所以它們需要是數字。感謝您的快速響應和解釋! – kslayerr

2

這實際上並不是由合併引起的,它必須是代碼中的早一些東西。如果在讀入數據時發生,請嘗試使用check.names=FALSE選項。

a <- data.frame(a=1:3, b=4:6) 
b <- data.frame(a=1:3, c=7:9) 
names(b)[2] <- 2485 
merge(a,b) 
## a b 2485 
## 1 1 4 7 
## 2 2 5 8 
## 3 3 6 9 
+0

當我讀取數據時,它並沒有發生,而是在我合併後......但check.names = FALSE選項很好記住未來。謝謝! – kslayerr