Узнайте, где находятся заданные числа в ряду вектора в R - PullRequest
0 голосов
/ 07 марта 2019

У меня есть три переменные 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 ]

1 голос
/ 08 марта 2019

С парой функций 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 вместо этого - я оставил это подробным, чтобы было немного яснее, что происходит.

1 голос
/ 08 марта 2019

Для записи вот как вы можете получить точный результат в вопросе.

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...