2016-10-12 4 views
1
x1 <- c(1, 2, 3) 
x2 <- c("a", "b", "a") 
x3 <- as.Date(c(NA, "2016/01/01", NA), "%Y/%m/%d") 
df <- data.frame(x1,x2,x3) 

wenn ich mich bewerben Aggregat df:Aggregate von NA-Wert in R

aggregate(x1~x2+x3, df, sum) 

Das Ergebnis sieht wie folgt aus, aber ignoriert NA Werte:

x2   x3 x1 
b 2016/01/01 2 

Also, was ich brauche, ist zu aggregieren NA Werte und haben ein Ergebnis wie folgt:

x2   x3 x1 
a   NA 4 
b 2016/01/01 2 

Kann mir bitte jemand helfen?

+0

@jogo über dasselbe sagen, aber Sie werden eine benutzerdefinierte Funktion entwerfen müssen ? – agenis

+0

Ich würde nur vorschlagen, 'data.table' oder etwas anderes zu verwenden, das es Ihnen erlauben würde, auch nach' NA'-Werten zu gruppieren. Wie 'Bibliothek (data.table); as.data.table (df) [, Summe (x1), durch =. (x2, x3)] '. – A5C1D2H2I1M1N2O1R2T1

+1

@jogo, ich glaube nicht, dass das funktionieren würde. Ich bin ziemlich sicher, dass Sie noch die "x3" Gruppierungsvariable ändern müssen, so dass es keine "NA" Werte enthält. – A5C1D2H2I1M1N2O1R2T1

Antwort

0

ich erreicht dies durch NA als Faktor Ebene Zugabe dann die Aggregation durchführen:

x1 <- c(1, 2, 3) 
x2 <- c("a", "b", "a") 
x3 <- as.factor(as.Date(c(NA, "2016/01/01", NA), "%Y/%m/%d")) 
x3 <- addNA(x3) 
df <- data.frame(x1,x2,x3) 

aggregate(x1~x2+x3, df, sum) 
x2   x3 x1 
1 b 2016-01-01 2 
2 a  <NA> 4 
+1

Das hilft wirklich. Danke vielmals! – Hao

+0

@Hao Glücklich zu helfen! –