Estou tentando criar uma combinação única de todos os elementos de dois vetores de tamanhos diferentes em R.
Por exemplo, o primeiro vetor é
a <- c("ABC", "DEF", "GHI")
e o segundo são as datas armazenadas como strings atualmente
b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")
Eu preciso criar um quadro de dados com duas colunas como esta
> data
a b
1 ABC 2012-05-01
2 ABC 2012-05-02
3 ABC 2012-05-03
4 ABC 2012-05-04
5 ABC 2012-05-05
6 DEF 2012-05-01
7 DEF 2012-05-02
8 DEF 2012-05-03
9 DEF 2012-05-04
10 DEF 2012-05-05
11 GHI 2012-05-01
12 GHI 2012-05-02
13 GHI 2012-05-03
14 GHI 2012-05-04
15 GHI 2012-05-05
Então, basicamente, estou procurando uma combinação única considerando todos os elementos de um vetor (a) justapostos com todos os elementos do segundo vetor (b).
Uma solução ideal seria generalizar para mais vetores de entrada.
Veja também:
Como gerar uma matriz de combinações
plyr
apenas fazer uma espécie:result <- expand.grid(a=a,b=b); result <- result[order(result$a,result$b),];
expand.grid(b=b,a=a)[2:1]
O
tidyr
pacote oferece uma boa alternativacrossing
, que funciona melhor do que aexpand.grid
função clássica porque (1) as strings não são convertidas em fatores e (2) a classificação é mais intuitiva:fonte
Faltando neste r-faqvisão geral é a
CJ
função - doTabela de dados-pacote. Usando:dá:
NOTA: desde a versão 1.12.2,
CJ
as colunas resultantes são autonames (veja também aqui e aqui ).fonte
Desde a versão 1.0.0,
tidyr
oferece sua própria versão doexpand.grid()
. Ele completa a família existente deexpand()
,nesting()
ecrossing()
com uma função de baixo nível que funciona com vetores .Quando comparado com
base::expand.grid()
:fonte
você pode usar a função de ordem para classificar qualquer número de colunas. pelo seu exemplo
fonte