两个列表之间的部分stru匹配,边界问题

两个列表之间的部分stru匹配,边界问题,r,R,因此,我有两个大小不等的列表,都包含名称。 第一个列表的元素是唯一的、干净的名称,第二个列表的元素是重复的名称,后面是我不喜欢的字母数字书写信息。 我是个新手,所以请原谅我做事可能效率低下 这就是我所拥有的 namesfun<-(sapply(Cnamesvec, function (x)(starts_with(x,sapply(MXnamesvec, function (y)y),ignore.case = T)))) namesfun我们可以按相反顺序排列Cnamesvec,这样中

因此,我有两个大小不等的列表,都包含名称。 第一个列表的元素是唯一的、干净的名称,第二个列表的元素是重复的名称,后面是我不喜欢的字母数字书写信息。 我是个新手,所以请原谅我做事可能效率低下

这就是我所拥有的

namesfun<-(sapply(Cnamesvec, function (x)(starts_with(x,sapply(MXnamesvec, function (y)y),ignore.case = T))))

namesfun我们可以按相反顺序排列
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 

Cnamesvec感谢您的回复:)我已经使用了您的答案,我得到的结果是重新排序的,这不允许我实际使用我想要的结果。不过,它帮助我调整了我的命令,因此它将相应地工作。非常感谢您的帮助:)这真的很有帮助