将相似的字符串重命名为单个通用字符串,并测试这些字符串以将其分组

问题描述 投票:0回答:1

这是我问的第一个问题,所以我希望我能尽我所能......

我正在努力简化一些数据,特别是字符串。我有一个数据框,其中包含正在工作的组件的制造商名称,但它们以许多不同但相似的方式输入。

为了使用更常见的名称,我将更改为汽车公司。例如“福特汽车公司”、“福特”、“FoMoCo”。 “Telsa”、“Telsa Inc.”、“丰田”、“日本丰田”、“本田”、“本田汽车(日本)有限公司”之类的东西。

我想将这些全部更改为一个简化的字符串,例如“Ford”“Tesla”等。本质上是通过整个数据框进行查找和替换。我尝试使用 str_replace_all 并取得了一些成功。似乎我必须将它用于每种可能的结果,并且由于某种原因它不适用于“本田汽车(日本)有限公司”。

此外,因为我有大量福特和特斯拉的加权数据,所以我想拒绝任何不是福特或特斯拉的东西,只是称它们为“其他”。我不知道如何处理。某种案例陈述?我猜我可以遵循 str_replace_all 模式,但如果我稍后想要/需要它,我不一定想销毁数据框中的数据。也许我只是创建一个新的 df 并进行更改...

我可以在 Excel 中使用过滤器执行此操作,并使用查找替换全部手动更改它,但这很麻烦,我必须每周左右手动执行一次,当我提取数据时,我知道这不是最优雅的计算方法出去对我的未来没有帮助。

让我们尝试重现

mfg <- c("Ford Motor Company", "Ford Co.", "FoMoCo.", "Tesla", "Tesla Inc.", "Toyota", "Toyota of Jpn", "Honda Motors", "Honda Motors (Japan) Co., Ltd." )

sales <- c(12, 14, 5, 50, 20, 30, 22, 50, 11)

df <- data.frame(mfg, sales)

ford_str <- c("Ford Motor Company" = "Ford", "Ford Co." = "Ford", "FoMoCo." = "Ford") 

df$mfg <- str_replace_all(CarSales$mfg,ford_str)

通常有助于琴弦。但由于某种原因不适用于“本田汽车(日本)有限公司”。它将取代本田的所有其他版本,但不会取代“本田汽车(日本)有限公司”。

我不知道福特、特斯拉、其他的情况如何。

r dplyr stringr
1个回答
0
投票

如果您将所有制造商名称值都放在一个命名向量中,则可以使用“查找”来执行此操作,然后用“其他”替换缺失的值:

library(tidyverse)

df <- tibble::tribble(
                              ~mfg, ~sales,
              "Ford Motor Company",     12,
                        "Ford Co.",     14,
                         "FoMoCo.",      5,
                           "Telsa",     50,
                      "Telsa Inc.",     20,
                          "Toyota",     30,
                   "Toyota of Jpn",     22,
                    "Honda Motors",     50,
  "Honda Motors (Japan) Co., Ltd.",     11
  )

car_names <-
  c(
    "Ford Motor Company" = "Ford",
    "Ford Co." = "Ford" ,
    "FoMoCo." = "Ford",
    "Honda Motors" = "Honda",
    "Honda Motors (Japan) Co., Ltd." = "Honda"
  ) 

df |> 
  mutate(cartype = car_names[mfg]) |> 
  replace_na(list(cartype = "Other"))
#> # A tibble: 9 × 3
#>   mfg                            sales cartype
#>   <chr>                          <dbl> <chr>  
#> 1 Ford Motor Company                12 Ford   
#> 2 Ford Co.                          14 Ford   
#> 3 FoMoCo.                            5 Ford   
#> 4 Telsa                             50 Other  
#> 5 Telsa Inc.                        20 Other  
#> 6 Toyota                            30 Other  
#> 7 Toyota of Jpn                     22 Other  
#> 8 Honda Motors                      50 Honda  
#> 9 Honda Motors (Japan) Co., Ltd.    11 Honda
© www.soinside.com 2019 - 2024. All rights reserved.