![](/img/trans.png)
[英]How to rename multiple columns with different column names and different order in several dataframes based on a dictionary in R
[英]How to rename observations in different columns in different dataframes in R?
我想將“名稱”添加到開頭,並將“plc”添加到不同數據框中不同列中的觀察名稱的末尾,除非名稱已經在正確的位置具有“名稱”或“plc”。 以下是一個簡單的表示。
原始數據幀
names1a <- c("Name Alperton plc", "Bury", "Central", "Durham")
names1b <- c("Egham plc", "Fulton", "Great", "Heywood plc")
year1 <- c(1999, 2000, 2001, 2001)
df1 <- data.frame(names1a, names1b, year1)
names2 <- c("Charleton plc", "Birmingham", "Name Tees", "Salford")
year2 <- c(2000, 1955, 2001, 2001)
df2 <- data.frame(names2, year2)
期望的結果:
df1
names1a names1b year1
1 Name Alperton plc Name Egham plc 1999
2 Name Bury plc Name Fulton plc 2000
3 Name Central plc Name Great plc 2001
4 Name Durham plc Name Heywood plc 2001
df2
names2 year2
1 Name Charleton plc 2000
2 Name Birmingham plc 1955
3 Name Tees plc 2001
4 Name Salford plc 2001
我的方法:我得到了我想要的結果,但是我有一個包含很多列的大型數據集,所以我的方法太重復了。 我努力制作功能,我認為在這里會有用:
df1$names1a <- sub("$", " plc", df1$names1a)
df1$names1b <- sub("$", " plc", df1$names1b)
df2$names2 <- sub("$", " plc", df2$names2)
df1$names1a <- sub("plc plc", "plc", df1$names1a)
df1$names1b <- sub("plc plc", "plc", df1$names1b)
df2$names2 <- sub("plc plc", "plc", df2$names2)
df1$names1a <- sub("^", "Name ", df1$names1a)
df1$names1b <- sub("^", "Name ", df1$names1b)
df2$names2 <- sub("^", "Name ", df2$names2)
df1$names1a <- sub("Name Name", "Name", df1$names1a)
df1$names1b <- sub("Name Name", "Name", df1$names1b)
df2$names2 <- sub("Name Name", "Name", df2$names2)
最簡單的可能是刪除“名稱”和“plc”,然后將其添加到所有內容中,如下所示:
f <- function(x) paste("Name", trimws(gsub("^Name|plc$", "", x)), "plc")
cols <- c("names1a", "names1b")
df1[cols] <- lapply(df1[cols], f)
df1
# names1a names1b year1
# 1 Name Arton plc Name Egh plc 1999
# 2 Name Bury plc Name Futon plc 2000
# 3 Name Cntr plc Name Grt plc 2001
# 4 Name Durh plc Name Hywood plc 2001
df2$names2 <- f(df2$names2)
df2
# names2 year2
# 1 Name Chrton plc 2000
# 2 Name Biringh plc 1955
# 3 Name Ts plc 2001
# 4 Name Sford plc 2001
您可以試試這個 function,它允許分別編輯兩個數據框,並且可以處理以“名稱...”開頭的任意數量的列。 基於tidyverse
包:
library(dplyr)
library(stringr)
fun <- function(df){
df <-
df %>%
mutate(across(starts_with("names"), ~ str_replace_all(., "^Name | plc$", "")),
across(starts_with("names"), ~ paste("Name", ., "plc")))
return(df)
}
fun(df = df1)
#> names1a names1b year1
#> 1 Name Alperton plc Name Egham plc 1999
#> 2 Name Bury plc Name Fulton plc 2000
#> 3 Name Central plc Name Great plc 2001
#> 4 Name Durham plc Name Heywood plc 2001
fun(df2)
#> names2 year2
#> 1 Name Charleton plc 2000
#> 2 Name Birmingham plc 1955
#> 3 Name Tees plc 2001
#> 4 Name Salford plc 2001
您可以將兩個 mutate 函數合二為一:
mutate(across(starts_with("names"), ~ paste("Name", str_replace_all(., "^Name | plc$", ""), "plc")))
由代表 package (v0.3.0) 於 2021 年 1 月 17 日創建
您可以先從名稱中刪除混淆字符串,然后再刪除 append 'name' 和 'plc' 但是你喜歡:
library(tidyverse)
names1a <- c("Name Alperton plc", "Bury", "Central", "Durham")
names1a <- str_replace_all(names1a, "Name ", "")
names1a <- str_replace_all(names1a, " plc", "")
names1a <- paste0("Name ", names1a, " plc")
names1a
#> [1] "Name Alperton plc" "Name Bury plc" "Name Central plc"
#> [4] "Name Durham plc"
由代表 package (v0.3.0) 於 2021 年 1 月 17 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.