r - 两个列表之间的部分 str_match,边界问题
问题描述
所以我有两个大小不等的列表,都包含名称。第一个列表的元素是唯一的、干净的名称,第二个列表的元素是重复的名称,后面是我不关心的字母数字书面信息。我对 R 很陌生,所以请原谅我可能效率低下的做事方式。
所以这就是我所拥有的,
namesfun<-(sapply(Cnamesvec, function (x)(starts_with(x,sapply(MXnamesvec, function (y)y),ignore.case = T))))
Cnamesvec 是第一个、干净、较小的列表,而 MXnamesvec 是后者。
这对于我想要做的事情很好,因为它给了我在列表中的干净名称与混合名称的位置,我可以根据我的函数的输出重新排序和扩展干净名称的列,然后cbind 它在我的数据框上。
但是我有一个小问题,我真的不知道如何解决。如果在我的干净名字列表中我有“Mario Garcia”,而在另一个列表中我有“Mario Garcia Leader for 1/2f,finished last...”,“Mario Garcia”和“Mario Garcia Jr”,他们三个都会匹配。我显然不希望“Mario Garcia Jr”匹配。但如果“Mario Garcia”和“Mario Garcia Jr”是两个不同的名字,那么它们都会在干净的名字列表中。任何想法将不胜感激:)
我的列表 Cnamesvec 示例:
(1) 马里奥·加西亚
(2) 小马里奥·加西亚
(3) 华池派
(4) 丹尼尔·德罗西
MXnamesvec:
(1) Daniel De Rossi 开局不错,落后,排名第三
(2) 马里奥·加西亚被留在抽签台上
(3) Mario Garcia Jr 起步落后,排名第一
(4)花旗帕快跑,一路领先
解决方案
我们可以Cnamesvec
按相反的顺序排列,以便"Mario Garcia Jr"
出现在索引之前"Mario Garcia"
,然后在索引MXnamesvec
被使用后删除它们:
Cnamesvec <- c(
"Mario Garcia",
"Mario Garcia Jr",
"Huachipato",
"Daniel De Rossi"
)
MXnamesvec <- c(
"Daniel De Rossi Started well, left behind,finished 3rd",
"Mario Garcia Was left in the draw stand",
"Mario Garcia Jr Started behind, finished 1st",
"Huachipato fast race,led all the way"
)
ind <- seq_along(MXnamesvec)
namesfun <- list()
for (clean_name in sort(Cnamesvec, decreasing = TRUE)) {
x <- tidyselect::starts_with(clean_name, vars = setNames(nm = MXnamesvec), ignore.case = TRUE)
y <- intersect(ind, x)
namesfun[[clean_name]] <- setNames(y, MXnamesvec[y])
ind <- setdiff(ind, x)
}
namesfun <- namesfun[Cnamesvec]
namesfun
# $`Mario Garcia`
# Mario Garcia Was left in the draw stand
# 2
#
# $`Mario Garcia Jr`
# Mario Garcia Jr Started behind, finished 1st
# 3
#
# $Huachipato
# Huachipato fast race,led all the way
# 4
#
# $`Daniel De Rossi`
# Daniel De Rossi Started well, left behind,finished 3rd
# 1
推荐阅读
- javascript - 在最终提交 Django 表单之前在 html 模型中显示警告消息
- spring - Spring Cloud Streams 2.2+ kafka binder embeddedHeaders在APPD添加本机奇点标头后存在本机标头时不会回退
- c++ - for 循环在 switch case 之间拆分的行为
- python - 一句话运行多次,出现不同的错误
- python - RuntimeError:请确保已安装 R(已编辑)
- python - 如何复制选定的文件而不将其移动到python中的另一个目录
- tensorflow - 无法在 TensorFlow 2.x 版的 GraphDef 中加载冻结模型 (.pb)
- numpy - 如何从 np.unique 重建数组
- javascript - 来自 Firebase 存储 URL 的 toDataURL 显示空白图像
- django - 查询数据库时如何使用 django-postgrespool2 设置的池连接?