2016-04-14 4 views
0

ich die Daten auf dem Format haben: -die Daten in R an Kunden-ID Roll- und Produktebene

id  product mcg  txn 
101 gold  hotel 1 
101  gold  hotel 2 
101  clas  hotel 22 
101  clas  airline 23 

Ich möchte die Ausgabe als

  hotel_txn airline_txn 
101 gold 3    . 
101 clas 22    23 

kann pls jemand in immer mir helfen, die gewünschte Ausgabe?

Im Grunde bin ich auf der Suche nach einer Alternative zu Case bei Anweisung in SAS?

+0

Try 'Bibliothek (data.table); dcast (setDT (df1), id + produkt ~ mcg, value.var = "txn", Summe) ' – akrun

Antwort

2

Wir verwenden xtabs

xtabs(txn~idprod + mcg, transform(df1, idprod = paste(id, product), 
       mcg = paste0(mcg, "_txn"))) 
#   mcg 
#idprod  airline_txn hotel_txn 
# 101 clas   23  22 
# 101 gold   0   3 
0

Sie können dplyr und tidyr dies zu tun:

library(dplyr) 
library(tidyr) 
df %>% group_by(id, product, mcg) %>% summarise(txn = sum(txn)) %>% spread(mcg, txn) 
Source: local data frame [2 x 4] 
Groups: id, product [2] 

    id product airline hotel 
    <int> <fctr> <int> <int> 
1 101 clas  23 22 
2 101 gold  NA  3 
+0

Gibt den Fehler, dass MCG-Spalte nicht existiert.Kannst du pls helfen? –

1

Reshape2 der dcast Funktion ist für diese Art von Sachen entworfen:

#creates your data frame 
df <- data.frame(id = c(101, 101, 101, 101), 
       product = c("gold", "gold", "clas", "clas"), 
       mcg = c("hotel", "hotel", "hotel", "airline"), 
       txn = c(1, 2, 22, 23)) 

#installs and loads the required package 
install.packages("reshape2") 
library(reshape2) 

#the function you would use to create the new data frame 
df2 <- dcast(df, id + product ~ mcg, value.var = "txn", sum) 

print(df2) 
    id product airline hotel 
1 101 clas  23 22 
2 101 gold  0  3 
+0

ID Produkt Fluggesellschaft Hotel Gold Klasse 1 101 clas 23 22 3 45 CAn erhalten wir die Daten in dieser Form? –

+0

@ankitagarwal können Sie bitte Ihre Anfrage klären? Ich verstehe nicht, wonach Sie in Ihrem Kommentar fragen. – bshelt141