簡體   English   中英

使用先前的列名和正則表達式模式重命名 R 中的數據框列名

[英]Rename Dataframe Column Names in R using Previous Column Name and Regex Pattern

我第一次在 R 中工作,並且在重命名數據框 (Grade.Data) 中的列名時遇到了困難。 我有一個從 csv 文件導入的數據集,其列名如下:Student.ID

Grade    

Interactive.Exercises.1..Health

Interactive.Exercises.2..Fitness

Quizzes.1..Week.1.Quiz

Quizzes.2..Week.2.Quiz

Case.Studies.1..Case.Study1

Case.Studies.2..Case.Study2

我希望能夠更改變量名稱,使它們更簡單,即從 Interactive.Exercises.1.Health 到 Interactive.Exercises.1 或 Quizzes.1.Week.1.Quiz 到 Quizzes.1

到目前為止,我已經嘗試過這個:

grep(".*[0-9]", names(Grade.Data))

但我得到了這個回報:

[1]  3  4  5  6  7  8  9 11 12 13 14 15 16 17 19 20 21 22 23 24 25

誰能幫我弄清楚發生了什么,並寫出更好的正則表達式? 非常感謝。

您似乎在第一個數字塊之后截斷了列名。

您可以使用以下sub解決方案:

names(Grade.Data) <- sub("^(.*?\\d+).*$", "\\1", names(Grade.Data))

查看正則表達式演示

詳情

  • ^ - 字符串的開始
  • (.*?\\\\d+) - 第 1 組(后來從替換模式中用\\1引用)匹配任何 0+ 字符盡可能少( .*? ),然后匹配 1 個或更多數字( \\d+
  • .* - 盡可能多的任意 0+ 個字符
  • $ - 字符串結尾

您的正則表達式本身沒有任何問題。 您正在尋找的可能是regexpr的組合 - 獲取正則表達式的開始和結束 - 和regmatches - 獲取與regexpr輸出對應的實際字符串:

start_end <- regexpr(".*[0-9]", names(Grade.data))
regmatches(names(Grade.data), start_end)
# [1] "Interactive.Exercises.1"     "Interactive.Exercises.2"    
# [3] "Quizzes.1..Week.1"           "Quizzes.2..Week.2"          
# [5] "Case.Studies.1..Case.Study1"

在點星后面添加一個問號將使正則表達式匹配盡可能少的字符,因此它將在第一個數值之后停止:

start_end <- regexpr(".*?[0-9]", names(Grade.data))
regmatches(names(Grade.data), start_end)
# [1] "Interactive.Exercises.1"     "Interactive.Exercises.2"    
# [3] "Quizzes.1"      "Quizzes.2"          
# [5] "Case.Studies.1"

您應該使用函數names ,下面我寫了一個小例子,名稱字符串可以根據需要而定。

names(x = Grade.Data) <- c("Col1_name", "Col2_name")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM