R + połącz listę wektorów w jeden wektor
Mam pojedynczą listę wektorów liczbowych i chcę je połączyć w jeden wektor. Ale nie jestem w stanie tego zrobić. Lista ta może mieć jeden element wspólny dla elementu listy. Wektor końcowy nie powinien dodawać ich dwukrotnie. Oto przykład:
>lst
`1`
[1] 1 2
`2`
[2] 2 4 5
`3`
[3] 5 9 1
Chcę, aby wynik końcowy był taki
>result
[1] 1 2 4 5 9 1
Próbowałem robić następujące rzeczy, nie martwiąc się o reputację:
>vec<-vector()
>sapply(lst, append,vec)
I
>vec<-vector()
>sapply(lst, c, vec)
Żaden z nich nie zadziałał. Czy ktoś może mi w tym pomóc?
Dzięki. 5 answers
Rozwiązanie szybsze od zaproponowanego powyżej:
vec<-unlist(lst)
vec[which(c(1,diff(vec)) != 0)]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 07:00:56
Kolejna odpowiedź za pomocą Reduce()
.
Utwórz listę wektorów:
lst <- list(c(1,2),c(2,4,5),c(5,9,1))
Połącz je w jeden wektor
vec <- Reduce(c,lst)
vec
# [1] 1 2 2 4 5 5 9 1
Powtarzaj tylko raz:
unique(Reduce(c,lst))
#[1] 1 2 4 5 9
Jeśli chcesz zachować ten powtórzony na końcu, możesz użyć vec[which(c(1,diff(vec)) != 0)]
jak w odpowiedzi @ Rachid
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-20 13:39:14
Chcesz rle:
rle(unlist(lst))$values
> lst <- list(`1`=1:2, `2`=c(2,4,5), `3`=c(5,9,1))
> rle(unlist(lst))$values
## 11 21 22 31 32 33
## 1 2 4 5 9 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-20 04:46:21
Stack też to ładnie zrobi i wygląda bardziej zwięźle:
stack(lst)$values
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-19 00:36:28
Robienie tego w tidyverse sposób:
library(tidyverse)
lst %>% reduce(c) %>% unique
To używa (uncapitalized) reduce
wersja z purrr w połączeniu z rurami. Zauważ również, że jeśli lista zawiera nazwane wektory, ostateczne nazewnictwo będzie różne w zależności od tego, czy używane są metody unlist
lub reduce
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 23:34:06