Таблица индексации в [R] - PullRequest
0 голосов
/ 21 мая 2018

У меня есть вектор:

a = c(1, 3, 2, 2, 4, 1, 1, NA)

Я хочу создать что-то вроде:

[["1"]]
1, 6, 7
[["2"]]
3, 4
[["3"]]
2
[["5"]]
5

Отображение из значения в индекс.Любая помощь!

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Это split операция с индексами a:

split(seq_along(a), a)

#$`1`
#[1] 1 6 7
#
#$`2`
#[1] 3 4
#
#$`3`
#[1] 2
# 
#$`4`
#[1] 5
0 голосов
/ 22 мая 2018

Вот еще один вариант с unstack

unstack(list(i = seq_along(a), a), i ~ a)
#$`1`
#[1] 1 6 7

#$`2`
#[1] 3 4

#$`3`
#[1] 2

#$`4`
#[1] 5
0 голосов
/ 21 мая 2018
setNames(lapply(unique(a), function(x) which(x == a)), unique(a))

# $`1`
# [1] 1 6 7
# 
# $`3`
# [1] 2
# 
# $`2`
# [1] 3 4
# 
# $`4`
# [1] 5
# 
# $<NA>
# integer(0)

Это немного короче при использовании tidyverse

library(tidyverse)
map(unique(a) %>% setNames(.,.), ~which(.x == a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...