按行从数据框中的列中提取公共子字符串
Rowwise extract common substrings from to columns in a data frame
我想在数据框中匹配城市和地区。列有点乱,所以我想提取出现在两列中的城市/地区的名称,如下例所示。
A <- c("Berlin",
"Hamburg",
"Munich",
"Stuttgart",
"Rhein Main Frankfurt",
"Hannover")
B <- c("Berlin Brandenburg",
"Hamburg",
"Munich Bayern",
"Region Stuttgart",
"Main Rhein Darmstadt",
"Wiesbaden")
生成的列/数据框应如下所示:
result <- c("Berlin",
"Hamburg",
"Munich",
"Stuttgart",
"Rhein Main",
NA
)
df <- data.frame(A, B, result)
...虽然它是“Rhein Main”还是“Main Rhein”并不重要。
感谢您的帮助!
也许我错过了一个聪明的正则表达式技巧,但一个选择是将字符串拆分为单词并使用 intersect
.
找到常用单词
df$Result <- mapply(function(x, y) paste0(intersect(x, y), collapse = " "),
strsplit(df$A, '\s+'), strsplit(df$B, '\s+'))
df
# A B Result
#1 Berlin Berlin Brandenburg Berlin
#2 Hamburg Hamburg Hamburg
#3 Munich Munich Bayern Munich
#4 Stuttgart Region Stuttgart Stuttgart
#5 Rhein Main Frankfurt Main Rhein Darmstadt Rhein Main
#6 Hannover Wiesbaden
此 returns 没有匹配项时为空字符串。如果需要,您可以将空字符串转换为 NA
。
我想在数据框中匹配城市和地区。列有点乱,所以我想提取出现在两列中的城市/地区的名称,如下例所示。
A <- c("Berlin",
"Hamburg",
"Munich",
"Stuttgart",
"Rhein Main Frankfurt",
"Hannover")
B <- c("Berlin Brandenburg",
"Hamburg",
"Munich Bayern",
"Region Stuttgart",
"Main Rhein Darmstadt",
"Wiesbaden")
生成的列/数据框应如下所示:
result <- c("Berlin",
"Hamburg",
"Munich",
"Stuttgart",
"Rhein Main",
NA
)
df <- data.frame(A, B, result)
...虽然它是“Rhein Main”还是“Main Rhein”并不重要。
感谢您的帮助!
也许我错过了一个聪明的正则表达式技巧,但一个选择是将字符串拆分为单词并使用 intersect
.
df$Result <- mapply(function(x, y) paste0(intersect(x, y), collapse = " "),
strsplit(df$A, '\s+'), strsplit(df$B, '\s+'))
df
# A B Result
#1 Berlin Berlin Brandenburg Berlin
#2 Hamburg Hamburg Hamburg
#3 Munich Munich Bayern Munich
#4 Stuttgart Region Stuttgart Stuttgart
#5 Rhein Main Frankfurt Main Rhein Darmstadt Rhein Main
#6 Hannover Wiesbaden
此 returns 没有匹配项时为空字符串。如果需要,您可以将空字符串转换为 NA
。