簡體   English   中英

通過更改值來更改數據框的列名 - R

[英]changing column names of a data frame by changing values - R

讓我有下面的數據框。

df.open<-c(1,4,5)
df.close<-c(2,8,3)

df<-data.frame(df.open, df.close)



> df
  df.open df.close
1       1        2
2       4        8
3       5        3

我想要更改包含“open”和“a”的列名和包含“close”和“b”的列名:

即我想獲得以下數據框:

  a b
1 1 2
2 4 8
3 5 3

我有很多這樣的數據框。 pre 值(這里是“df.”)正在改變,但“open”和“close”是固定的。

非常感謝。

我們可以創建一個 function 以供重用

f1 <- function(dat) {
     names(dat)[grep('open$', names(dat))] <- 'a'
      names(dat)[grep('close$', names(dat))] <- 'b'
     dat
}

並應用於數據

df <- f1(df)

-輸出

df
  a b
1 1 2
2 4 8
3 5 3

如果這些數據集在list

lst1 <- list(df, df)
lst1 <- lapply(lst1, f1)

感謝親愛的@akrun 富有洞察力的建議,我們可以在一個 go 中做到這一點。 因此,我們在pattern中創建字符向量並replacement str_replace的 arguments 以便能夠同時執行這兩個操作。 我們可以為它們中的每一個分配一個或多個長度的字符向量。 在后者的情況下,兩個向量的長度應該對應。 正如文檔所說,更重要的是:

\1、\2 等形式的引用將替換為相應匹配組的內容(由 () 創建)

library(dplyr)
library(stringr)

df %>%
  rename_with(~ str_replace(., c(".*\\.open", ".*\\.close"), c("a", "b"))) 

  a b
1 1 2
2 4 8
3 5 3

另一個使用gsub + match + setNames的基本 R 選項

setNames(
  df,
  c("a", "b")[match(
    gsub("[^open|close]", "", names(df)),
    c("open", "close")
  )]
)

  a b
1 1 2
2 4 8
3 5 3

暫無
暫無

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

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