簡體   English   中英

使用 R 中預先存在的名稱系統地重命名列名

[英]Systematically rename column names using pre-existing name in R

我有一個格式如下的數據框:

val1 = c(.35, .36, .35, .22, .27, .25)
val2 = c(.35, .35, .37, .40, .42, .46)
val3 = c(.88, .9, .87, .35, .35, .36)
val4 = c(.9, .91, .82, .36, .36, .36)
df = data.frame (val1, val2, val3, val4)
colnames(df)[1] = "group 1_31"
colnames(df)[2] = "group 1_32"
colnames(df)[3] = "group 2_32"
colnames(df)[4] = "group 10_310"

我知道這些列名不太理想,但不幸的是,它們是由我正在運行的程序自動提供的。 我想重命名每一列,使 a_bc 組變為 bca,如下所示:

colnames(df)[1] = "311"
colnames(df)[2] = "321"
colnames(df)[3] = "322"
colnames(df)[4] = "31010"

我知道我可以通過以下方式擺脫“組”:

colnames(df)=sub("group ","",colnames(df))

但這仍然給我留下了“1_31”、“1_32”等。

有沒有辦法在所有列名中自動將 a_bc 轉換為 bca (我有 55 個需要這種轉換)?

我已經閱讀了Rename Dataframe Column Names in R using Previous Column Name and Regex Pattern,但我認為我的情況不同,因為我需要重新排序現有的列名,而不僅僅是在特定位置將它們切斷。

我們可以在捕獲為一組后重新排列反向引用

colnames(df) <- sub('group (\\d+)_(\\d+)', "\\2\\1", colnames(df))
colnames(df)
#[1] "311"   "321"   "322"   "31010"
val1 = c(.35, .36, .35, .22, .27, .25)
val2 = c(.35, .35, .37, .40, .42, .46)
val3 = c(.88, .9, .87, .35, .35, .36)
val4 = c(.9, .91, .82, .36, .36, .36)
df = data.frame (val1, val2, val3, val4)
colnames(df)[1] = "group 1_31"
colnames(df)[2] = "group 1_32"
colnames(df)[3] = "group 2_32"
colnames(df)[4] = "group 10_310"

gsub("^group (\\d+)_(\\d+)", "\\2\\1", colnames(df))
[1] "311"   "321"   "322"   "31010"

暫無
暫無

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

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