2016-07-18 1 views
0
df <-data.frame(id=c(1L,1L,2L,3L,2L,3L,4L),brand=c('a','a','b','c','d','a','b'),quantity=c(
2L,1L,5L,10L,11L,1L,2L),stringsAsFactors=F); 

    id brand quantity 
1 1  a  2 
2 1  a  1 
3 2  b  5 
4 3  c  10 
5 2  d  11 
6 3  a  1 
7 4  b  2 

c'est la trame de donnéesdonnées Reshape de longue à large

si j'utilise la commande suivante

sparse_matrix1 <- reshape2::dcast(df, df$id~df$brand) 

je reçois la sortie suivante

df$id a b c d 
1  1 2 0 0 0 
2  2 0 1 0 1 
3  3 1 0 1 0 
4  4 0 1 0 0 

Il prend seulement première entrée pour le résultat mais il ne donne pas la somme des deux premières entrées.

Y at-il une manière telle que, je reçois la réponse que 3 (soit 2 + 1 somme de quantité pour les entrées première et seconde) marque = 3 et id = 1.

La sortie devrait être

df$id a b c d 
1  1 3 0 0 0 
2  2 0 1 0 1 
3  3 1 0 1 0 
4  4 0 1 0 0 

Merci d'avance.

+2

Vous cherchez 'dcast (df, df $ id ~ df marque $, fun.aggregate = somme)'? – mtoto

+0

merci beaucoup @mtoto pour m'aider. – Maddy

Répondre

0

Merci à "mtoto"

J'ai oublié d'ajouter fun.aggregate = somme dans la fonction.

le code devient

sparse_matrix1 <- reshape2::dcast(df, df$id~df$brand, fun.aggregate = sum)