0

我有 2 个带有列名的数据框:

print(colnames(selectedTrainData))
 [1] "V331" "V305" "V310" "V161" "V322" "V271" "V355" "V83"  "V185" "V10" 

print(colnames(selectedTestData))
 [1] "V330" "V304" "V309" "V160" "V321" "V270" "V354" "V82"  "V184" "V9"

这是 colnames 之间在 1 处的差异。如何重命名第一个数据框的 colnames,使其小于 1?

4

2 回答 2

3

这是一个分步细分

## first grab the column names as its own object
nms <- colnames(selectedTestData)

## second, strip out the starting "V"
nms <- gsub("V", "", nms)

## next, convert to a number
nms <- as.numeric(nms)

## substract 1 from each number
nms <- nms - 1

## The numbers are ready, now just paste the "V" back
nms <- paste("V", nms, sep="")

## Lastly, put the names back onto the original matrix or data.frame
colnames(selectedTestData) <- nms

Starting: 

   [1] "V330" "V304" "V309" "V160" "V321" "V270" "V354" "V82"  "V184" "V9"  

Ending: 

  [1] "V329" "V303" "V308" "V159" "V320" "V269" "V353" "V81"  "V183" "V8"  
于 2013-05-12T16:41:49.910 回答
2

如果数字始终是尾随元素,则此方法有效:

txt <- colnames(selectedTrainData)
r   <- regexpr('\\d+', txt)
colnames(selectedTrainData) <-
  paste(
    substr(txt, 1, r-1), 
    as.numeric(substring(txt, r))-1,
    sep=''
  )
于 2013-05-12T17:23:09.627 回答