[英]How to rename a specific column of multiple files with a list of names In r?
[英]How to rename specific part of column names in R?
我有一些列名如下jan_20_5
, feb_20_7
, mar_20_3
, apr_20_9
等。
我有 12 個這樣的列,並希望消除第二個“_”和 append 之后的所有內容,這些內容由三個一組共同組成,以便輸出如下內容: jan_20_winter
、 feb_20_winter
、 mar_20_winter
、 apr_20_spring
、 may_20_spring
、 jun_20_spring
、 jul_20_summer
等。
我怎樣才能在 R 中以有效的方式解決這個問題?
先感謝您
您可以使用stringr
,一些正則表達式查找字符串中的最后一個數字,然后用季節向量替換它?
library(stringr)
# Fake data
df <- data.frame(matrix(ncol = 12, nrow = 0))
colnames(df) <- paste(month.abb, 20:31, 4:15, sep = "_")
# Replacement
names(df) <- str_replace(names(df),
"\\d+$",
rep(c("winter", "spring", "summer", "autumn"), each = 3))
df
Output:
[1] Jan_20_winter Feb_21_winter Mar_22_winter Apr_23_spring May_24_spring Jun_25_spring Jul_26_summer
[8] Aug_27_summer Sep_28_summer Oct_29_autumn Nov_30_autumn Dec_31_autumn
<0 rows> (or 0-length row.names)
根據格式,這可能會幫助您:
# example colnames
cn <- c("jan_20_5", "feb_20_7", "mar_20_3", "apr_20_9", "may_20_18", "jun_20_8", "jul_20_4", "aug_20_7", "sep_20_5", "oct_20_4")
labl <- setNames(
gl(4,3, labels = c("winter", "spring", "summer", "fall")),
tolower(month.abb)
)
paste0(gsub("(.*_)(.*)", "\\1", cn), labl[gsub("_.*", "", cn)])
#> [1] "jan_20_winter" "feb_20_winter" "mar_20_winter" "apr_20_spring"
#> [5] "may_20_spring" "jun_20_spring" "jul_20_summer" "aug_20_summer"
#> [9] "sep_20_summer" "oct_20_fall"
由代表 package (v2.0.1) 於 2022 年 7 月 27 日創建
您可以將tolower(month.abb)
簡單映射到季節(在下面的示例中,我將月份 1:3、4:6、7:9 和 10:12 映射到冬季,spring,夏季,秋季,但您可以調整它),然后替換列名如下:
season=setNames(rep(c("winter","spring", "summer", "fall"),each=3),tolower(month.abb))
names(data) = sapply(str_remove(names(data),"_[0-9]{1,2}$"), \(k) {
paste0(k,"_",season[[substr(k,1,3)]])
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.