2016-11-01 2 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.names 또는 make.unique은 숫자로 시작될 때 X 접두사를 추가합니다. 그것을 제거하려면, 하나의 옵션은 우리가 make.names

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

'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 

입니다. 따라서 일반적으로 숫자 대신 '문자'접두사가있는 열 이름을 사용하는 것이 안전합니다. 우리가 말하는 '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