[英]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.