2016-10-12 2 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) 

, когда я применяю агрегат для df:Совокупные по значению НС в R

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

Результат выглядит следующим образом, но игнорируется NA значения:

x2   x3 x1 
b 2016/01/01 2 

Так что мне нужно агрегировать NA и имеют такой результат:

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

Может ли кто-нибудь помочь в этом?

+0

@jogo собирался сказать то же самое, но вы должны создать пользовательскую функцию ? – agenis

+0

Я просто предлагаю использовать 'data.table' или что-то еще, что позволит вам группировать значения' NA'. Подобно 'library (data.table); as.data.table (df) [, sum (x1), by =. (x2, x3)] '. – A5C1D2H2I1M1N2O1R2T1

+1

@jogo, я не думаю, что это сработало. Я уверен, что вам все равно придется изменить переменную группировки «x3», чтобы она не включала значения «NA» .... – A5C1D2H2I1M1N2O1R2T1

ответ

0

Я совершил это, добавив NA как уровень фактора затем выполняет агрегирование:

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

Это действительно помогает. Большое спасибо! – Hao

+0

@ Хао С удовольствием! –

Смежные вопросы