【发布时间】:2025-12-30 22:15:06
【问题描述】:
我所做的工作涉及在一个关键查找变量上合并来自不同来源的多个数据库。该变量是一个字符串变量,通常根据数据的来源(即“纽约市”、“纽约市”)以多种不同的方式拼写。
我编写了一个简单的函数来清理每个数据集中的查找变量,并以这种方式使用它:
clean.names <- function(x){
x %>%
str_remove_all('[:punct:]') %>%
str_to_lower() %>%
str_squish() %>%
str_trim()
}
#df_1 and df_2 are dataframes, with variables key that I use to merge.
df_1 %>%
mutate(clean_name = clean.names(key1)) %>%
left_join(df_2 %>%
mutate(clean_name = clean.names(key2)),
by = 'clean_name')
这个函数可以很好地完成它的预期用途。但是,代码有点冗长。我的问题是:如何创建一个与 dplyr 一起使用的函数(即没有引号等),它产生与上述相同的效果?我希望它采用真正的 dplyr 形式并作为连接函数中的包装器工作。我已经尝试过,但没有成功,请参见此处:
clean.names <- function(x =df, y = merge.vary){ # function adds
x$merge.vary <- y %>% # a new variable
str_remove_all('[:punct:]') %>% # to existing dataframe
str_to_lower() %>%
str_squish() %>%
str_trim()
}
clean.names(df_1, key1) %>% # then use the function as a wrapper
left_join(clean.names(df_2, key2))# for the dplyr join functions
有没有办法做到这一点?我想要的是一个类似于 dplyr 的代理函数,它看起来像:函数(数据帧,变量)。谢谢。
【问题讨论】:
-
也许值得探索:
fuzzyjoinpackage -
谢谢,我对此进行了调查,但无法完全弄清楚如何让事情联合起来。我再看看。
-
“我如何创建一个与 dplyr 一起使用的函数” - 任何将数据框作为第一个参数并返回数据框的函数都可以很好地使用 @987654326 @。 "(即没有引号等)" 这更难。 Programming with dplyr vignette 是一个很好的起点。