(R或EXCEL)将一列中的变量重命名为另一列中变量



我是R的初学者,正在Excel或R中寻求一些帮助。

我有一张excel表格,有两列(全部为文本(。

  • 第1列大约有100000行,是一个长名称列表
  • 第2列大约有500行,是一个缩短名称的列表

要求:如果第1列中的单元格包含第2列中的任何文本字符串,我需要将第1列的单元格重命名为第2列的字符串。第2列中的所有字符串都是唯一的,所以不应该存在重叠的问题。

我无法在Excel中找到它,因为单元格不完全匹配,Excel的近似匹配太不准确,无法使用。我考虑过用R来做,但列的行数不同,这让我很困惑。非常感谢任何可能的帮助。请让我知道我是否应该包括更多/更多的细节。非常感谢。

这是R格式的一个例子(除了由于行数不同,列是单独的dfs(

Column1 <- data.frame(Full_Name = c("Geico Auto Insurance",
"Geico Motorcycle Insurance",
"Geico Commercial Auto Insurance",
"State Farm Car Insurance",
"State Farm Life Insurance"))
Column2 <- data.frame(Group_Name = c("Geico ",
"State Farm",
"Allstate"))

更多:excel 中的示例

我们可以创建一个正则表达式来捕获'Column2''Group_Name'中的单词

library(dplyr)
library(stringr)
Column1 %>% 
mutate(New_Name = str_replace(Full_Name, 
str_c(".*(", str_c(Column2$Group_Name, collapse="|"),  ").*"), "\1"))

-输出

Full_Name   New_Name
1            Geico Auto Insurance     Geico 
2      Geico Motorcycle Insurance     Geico 
3 Geico Commercial Auto Insurance     Geico 
4        State Farm Car Insurance State Farm
5       State Farm Life Insurance State Farm

库(dplyr(库(字符串(

你可以分几个步骤完成:

  1. 为列2创建矢量

short_name_vct<-唯一(df$GroupName(

  1. 创建函数
get_match <- function(string) {

str_detect(stringr, short_name_vct)[short_name_vct]
}
  1. 然后只使用dplyr

df%>%mutate(new_col=get_match(full_name((

fuzzyjoin::regex_left_join(Column1, Column2, by = c("Full_Name" = "Group_Name"))
#                         Full_Name Group_Name
# 1            Geico Auto Insurance     Geico 
# 2      Geico Motorcycle Insurance     Geico 
# 3 Geico Commercial Auto Insurance     Geico 
# 4        State Farm Car Insurance State Farm
# 5       State Farm Life Insurance State Farm

从这里,您可以重命名Group_Name并使用它。您会发现NAs中没有正则表达式匹配,因此您可能希望使用dplyr::coalesce或类似的函数来使用第一个非NA值。

相关内容

最新更新