No tidyr, que critérios a função `gather` usa para mapear um dataframe de amplo a longo?
Eu estou tentando descobrir os argumentos paragather
notidyr
pacote.
Eu olhei para a documentação e a sintaxe se parece com:
gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
Há umexemplo nos arquivos de ajuda:
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
gather(stocks, stock, price, -time)
Estou curioso sobre a última linha:gather(stocks, stock, price, -time)
Aqui,stocks
é claramente os dados que queremos modificar, o que é bom.
Para que eu possa ler issostock
eprice
são argumentos para um par de valores-chave - mas como essa função decide como selecionar colunas para criar esse par de valores-chave? O dataframe original é assim:
time X Y Z
2009-01-01 1.10177950 -1.1926213 -7.4149618
2009-01-02 0.75578151 -4.3705737 -0.3117843
2009-01-03 -0.23823356 -1.3497319 3.8742654
2009-01-04 0.98744470 -4.2381224 0.7397038
2009-01-05 0.74139013 -2.5303960 -5.5197743
Não vejo nenhuma indicação de que devemos usar qualquer combinação deX
, Y
ouZ
. Quando estou usando essa função, sinto que estou apenas escolhendo nomes para o que quero que as colunas no meu dataframe formatado há muito tempo e orando para quegather
funciona magicamente. Venha para pensar sobre isso, eu me sinto da mesma maneira quando eu usomelt
.
Fazgather
olha o tipo da coluna? Como é mapeado de largo para longo?
EDITAR Ótima resposta abaixo, ótima discussão abaixo e para qualquer pessoa que queira mais informações sobre a filosofia e o uso dotidyr
pacote definitivamente deve ler issopapel, embora a vinheta não explique a sintaxe.