合并后如何在列名中删除X

时间:2016-11-01 13:12:37

标签: r

我已经按公共行名称合并了两个数据框,并且合并工作正常,但我在每个列名之前得到一个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 个答案:

答案 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"

&#39; X&#39;返回前缀。因此,通常情况下,使用&#39;字符&#39;列名称是安全的。前缀而不仅仅是数字。另外,如果我们想提取说'198101&#39;专栏,我们需要一个反引号

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 :(得分: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