type - wide data in r



Erro de dcast: 'Função de agregação ausente: padrão para comprimento' (1)

A razão pela qual você está recebendo este aviso está na descrição de fun.aggregate (veja ?dcast ):

função de agregação necessária se as variáveis ​​não identificarem uma única observação para cada célula de saída. O padrão é o tamanho (com uma mensagem), se necessário, mas não especificado

Assim, uma função de agregação é necessária quando há mais de um valor para um ponto no dataframe amplo.

Uma explicação baseada em seus dados:

Quando você usa dcast(df, Id + Task ~ Type, value.var="Freq") você obtém:

  Id Task A B
1  3    1 2 3
2  3    2 3 0
3  4    1 3 3
4  4    2 1 3

O que é lógico porque para cada combinação de Id , Task e Type existe apenas um valor em Freq . Mas quando você usa dcast(df, Id ~ Type, value.var="Freq") você obtém isso (incluindo uma mensagem de aviso):

Aggregation function missing: defaulting to length
  Id A B
1  3 2 2
2  4 2 2

Agora, olhando para a parte superior dos seus dados:

Id  Task Type    Freq  
3     1    A       2
3     1    B       3
3     2    A       3
3     2    B       0

Você vê porque este é o caso. Para cada combinação de Id e Type existem dois valores em Freq (para ID 3: 2 e 3 para A e 3 e 0 para o Tipo B ), enquanto você só pode colocar um valor nesse ponto no dataframe amplo para cada valor do type . Portanto, o dcast deseja agregar esses valores em um valor. A função de agregação padrão é length , mas você pode usar outras funções de agregação como sum , mean , sd ou uma função personalizada, especificando-as com fun.aggregate .

Por exemplo, com fun.aggregate = sum você recebe:

  Id A B
1  3 5 3
2  4 4 6

Agora não há nenhum aviso porque o dcast está sendo informado sobre o que fazer quando há mais de um valor: retorna a soma dos valores.

Meu df parece com isso:

Id  Task Type    Freq  
3     1    A       2
3     1    B       3
3     2    A       3
3     2    B       0
4     1    A       3
4     1    B       3
4     2    A       1
4     2    B       3

Eu quero reestruturar pelo Id e obter:

Id   A    B …  Z    
3    5    3      
4    4    6        

Eu tentei:

df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")

e recebi o erro:

Função de agregação ausente: padrão para comprimento

Eu não consigo descobrir o que colocar na fun.aggregate . fun.aggregate . Qual é o problema?





reshape2