2012-08-10 2 views
3

Possible en double:
Reshape data from long to wide format Rmoyen rapide pour remodeler

Avec:

day <- c(1, 1, 2, 2) 
prod <- c(1, 2, 1, 2) 
cost <- c(20.1, 17.7, 15.2, 23.3) 
record <- data.frame(day=day, prod=prod, cost=cost) 

record 
    day prod cost 
1 1 1 20.1 
2 1 2 17.7 
3 2 1 15.2 
4 2 2 23.3 

Qu'est-ce qu'un bon (rapide) façon de remodeler les données:

 day_1 day_2 
prod_1 20.1 15.2 
prod_2 17.7 23.3 

Merci!

+0

Désolé pour le double que je ne l'ai pas trouvé le bon mot pour rechercher des questions similaires. Merci à tous pour votre réponse! – Rock

Répondre

3

Je pense que dcast du paquet reshape2 a la syntaxe plus simple:

library(reshape2) 
dcast(prod ~ day, data=record, value.var='cost') 

    prod 1 2 
1 1 20.1 15.2 
2 2 17.7 23.3 

Cependant, cette question a été posée à plusieurs reprises et sera probablement rapidement fermé.

4

Pourquoi ne pas utiliser tapply - la fonction somme n'a pas d'importance que vous avez des valeurs uniques:

> tapply(record$cost,list(record$prod, record$day), FUN=sum) 

    1 2 
1 20.1 15.2 
2 17.7 23.3 
+0

Cela peut ne pas fonctionner car un jour donné il peut y avoir un produit manquant, mais fonctionne très bien autrement. Merci! – Rock

+1

Si cela fonctionne correctement, vous devez vous retrouver avec 'NA' dans la cellule où vous avez des données manquantes. Ce qui me semble être un bon comportement. – Ina

6

Nous pouvons également utiliser xtabs

xtabs(cost ~ prod + day, data = record) 

    day 
prod 1 2 
    1 20.1 15.2 
    2 17.7 23.3 
+0

+1 Pas besoin de dupliquer votre réponse. Nettoyer. –

Questions connexes