从R中的列名中删除重复的字符

时间:2014-10-01 02:08:49

标签: r

以下是我的大型数据框的一部分

> a
  SS29.SS29  PP1.PP1  SS4.SS4 CC43.CC43 FF57.FF57 NN23.NN23 MM25.MM25  KK9.KK9  MM55.MM55  AA75.AA75 SS88.SS88
1  669.9544 1.068153 35.86534  24.47688  1.058007  72.20306  1.854856 10.15414 0.08715572 0.02006310 0.1817582
2  651.2092 1.164428 37.59895  27.41381  1.095322  73.48029  1.927993 10.09958 0.09096972 0.02261701 0.1855258

我怎么能摆脱用点分隔的双列名?例如对于第一列,我想要SS29而不是重复的SS29.SS29,用于第二列PP1,依此类推。有没有自动化的方法呢?

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用sub删除点.字符后的子字符串。

names(a) <- sub('\\.[^.]*', '', names(a))

答案 1 :(得分:0)

您可以使用sub

names(a) <- sub("[.](.*)", "", names(a))
# [1] "SS29" "PP1"  "SS4"  "CC43" "FF57" "NN23"  
# [7] "MM25" "KK9"  "MM55" "AA75" "SS88"

substring

substring(names(a), 1, regexpr("[.]", names(a))-1)
# [1] "SS29" "PP1"  "SS4"  "CC43" "FF57" "NN23"
# [7] "MM25" "KK9"  "MM55" "AA75" "SS88"

strsplit

names(a) <- unlist(strsplit(names(a), "[.](.*)"))
# [1] "SS29" "PP1"  "SS4"  "CC43" "FF57" "NN23" 
# [7] "MM25" "KK9"  "MM55" "AA75" "SS88"

答案 2 :(得分:-2)

您可以使用

指定新的列名
colnames(a) <- new_column_names

要计算new_column_names,您可以使用正则表达式,例如gsub函数,如ssdecontrol建议的那样。

new_column_names <- gsub(...)