找出给定数字在R中的向量序列中的位置

时间:2019-03-07 20:34:29

标签: r

我有三个变量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

关于如何轻松实现的任何建议?

2 个答案:

答案 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或其他函数-我将其保留为冗长,以便更清楚地说明发生了什么。