我有两个数据帧,我想通过第一列连接它们,并忽略大小写:
df3<- data.frame("A" = c("XX28801","ZZ9"), "B" = c("one","two"),stringsAsFactors = FALSE)
df4<- data.frame("Z" = c("X2880","Zz9"),"C" = c("three", "four"), stringsAsFactors = FALSE)我想要的是:
df5<- data.frame(A = c("XX28801","ZZ9"), B = c("one","two"), Z = c(NA,"Zz9"), C = c(NA, "four"))但有趣的是,我使用的是fuzzyjoin包:
join <- regex_left_join(df3,df4,by= c("A" = "Z"), ignore_case = TRUE)ZZ9和Zz9匹配得很好,但我不知道为什么XX28801会匹配X2880。唯一的相似之处是XX28801中的X2880。
我也不想在连接之前大写/小写这些值,因为我希望列A和列Z保留它们的原始值。谢谢。
发布于 2020-11-20 04:05:49
正则表达式在正则表达式上加入join,这在右手表内的文本中搜索左手表中的文本。因此,当在"XX28801“中找到"X2880”时,这被认为是匹配的。
为了更好地理解正则表达式,您可能会发现使用grepl(pattern, text)探索一些比较很有用,如果在文本中找到模式,它将返回true/false:
> grepl('X2880', 'XX28801', ignore.case = TRUE)
[1] TRUE似乎您只想在整个文本字符串与整个文本字符串匹配时才进行匹配,而不是大写/小写。为此,我建议您创建要联接的临时列:
df3_w_lower = df3 %>%
mutate(A_for_join = tolower(A))
df4_w_lower = df4 %>%
mutate(Z_for_join = tolower(Z))
join = left_join(df3_w_lower, df4_w_lower, by = c("A_for_join" = "Z_for_join")) %>%
select(-A_for_join, - Z_for_join)通过使用临时列进行联接,您可以保留原始列中的大小写。
https://stackoverflow.com/questions/64914070
复制相似问题