在大型資料集中,我需要用相應的代碼替換區域名稱。
下面是一個可復制的小示例:
library(tidyverse)
library(stringr)
library(dplyr)
library(tidyr)
library(purrr)
library(stringi)
adrs_data <- data.frame (adress = c("6 Frien Street, Paris", "Toulouse, 7 Hospital street", "10 market avenue (Bordeaux)") )
dep_code <- data.frame (code = c("75", "31", "33"), names = c("Paris", "Toulouse", "Bordeaux"))
這是我嘗試過的:
d_search<-c(dep_code$names)
d_search <- paste(paste0(d_search[order(-nchar(d_search))]), collapse = "|")
c_search<-c(dep_code $code)
df<-adrs_data %>%
dplyr::mutate(c_adress = case_when(adress %in% d_search ~
str_replace_all(adress, d_search, c_search), TRUE ~ adress))
但它不會產生想要的輸出,即:
df <- data.frame (adress = c("6 Frien Street, 75", "31, 7 Hospital street", "10 market avenue (33)")
謝謝你的幫助,最好的問候
uj5u.com熱心網友回復:
合并兩個資料框后,您可以使用pmap替換每一行的模式:
library(dplyr)
library(stringr)
library(purrr)
library(fuzzyjoin)
fuzzy_left_join(adrs_data, dep_code, match_fun = str_detect,
by = c("adress" = "names")) %>%
mutate(adress = pmap(., ~ str_replace(..1, ..3, ..2)))
# adress code names
# 1 6 Frien Street, 75 75 Paris
# 2 31, 7 Hospital street 31 Toulouse
# 3 10 market avenue (33) 33 Bordeaux
uj5u.com熱心網友回復:
這也有效并洗掉了括號:
我又添加了一個條目adrs_data
adrs_data <- data.frame (adress = c("6 Frien Street, Paris", "Toulouse, 7 Hospital street", "10 market avenue (Bordeaux)", "9 Test Street, Paris") )
dep_code <- data.frame (code = c("75", "31", "33"), names = c("Paris", "Toulouse", "Bordeaux"))
sapply(seq(nrow(adrs_data)), \(i){
adrs_data[i,] %>%
str_replace_all(dep_code$names, dep_code$code) %>%
.[.!= adrs_data[i,]] %>%
sub(pattern = "\\(", replacement = "", x = .) %>%
sub(pattern = "\\)", replacement = "", x = .)
})
[,1]
[1,] "6 Frien Street, 75"
[2,] "31, 7 Hospital street"
[3,] "10 market avenue 33"
[4,] "9 Test Street, 75"
對于非常短的資料,這甚至可以提供不錯的速度。
Unit: milliseconds
min lq mean median uq max neval
1.508001 1.671950 2.481109 1.823151 2.534501 11.9309 100 # lapply
58.665500 67.577851 85.267257 76.948251 89.716950 231.3375 100 # fuzzy
與@Ma?l 針對大資料集的解決方案進行比較會很有趣。我假設資料越大,lapply 解決方案越慢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529436.html
標籤:r细绳
上一篇:根據字串中的間隔自動生成組
