我有三个变量a1,a2和a3。
a1 <- 1:10
a2 <- 11:20
a3 <- 21:30
然后我有另一个变量叫my.numbers <- c(1, 20, 22,11)
我想找出这些号码的位置。所以我想要的结果是:
1 in a1
20 in a2
22 in a3
11 in a2
关于如何轻松完成的任何建议?
通过几个purrr::map
函数,您可以跨数字工作,然后在数字中跨a
向量工作。
我正在用tibble::lst
制作一个a
向量的列表,因为它将列表的名称设置为进入其中的变量的名称 - 对于这样的事情来说很方便,因为列表项的名称很重要。
library(tidyverse)
a_list <- lst(a1, a2, a3)
my.numbers %>%
map_chr(function(num) {
which_a <- map_lgl(a_list, ~(num %in% .))
a_name <- names(a_list)[which_a]
str_glue("{num} in {a_name}")
})
#> [1] "1 in a1" "20 in a2" "22 in a3" "11 in a2"
您可以在map_lgl
之后使用match
或其他函数 - 我让它很冗长,以便更清楚地了解发生了什么。
为了记录,这里是你如何得到问题的确切结果。
a1 <- 1:10
a2 <- 11:20
a3 <- 21:30
L<-list("a1"=a1,"a2"=a2,"a3"=a3)
my.numbers <- c(1, 20, 22, 11)
func<-function(item){
my.numbers[which(my.numbers %in% item)]
}
Fin<-lapply(L, func)
for(i in 1:length(Fin)){
Index<-unlist(Fin[i])
name<-paste("a",i, sep="")
for(i in 1:length(Index)){
print(paste(Index[i], "in", name))
}
}
[1] "1 in a1"
[1] "20 in a2"
[1] "11 in a2"
[1] "22 in a3"