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