两个列表之间的部分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感谢您的回复:)我已经使用了您的答案,我得到的结果是重新排序的,这不允许我实际使用我想要的结果。不过,它帮助我调整了我的命令,因此它将相应地工作。非常感谢您的帮助:)这真的很有帮助