我有三个变量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
关于如何轻松实现的任何建议?
答案 0 :(得分:1)
在这里作记录,是您如何找出问题的确切结果。
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"
答案 1 :(得分:1)
使用几个purrr::map
函数,您可以对数字进行运算,然后在其中对a
向量进行运算。
我用a
制作了tibble::lst
向量的列表,因为它将列表的名称设置为要进入其中的变量的名称—像这样的名称很方便重要的列表项。
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"
您可以在match
之后使用map_lgl
或其他函数-我将其保留为冗长,以便更清楚地说明发生了什么。