with valores una sustituir por omitir nulos infinito faltantes detectar datos columna cambiar r sum na

valores - hacer la suma de un conjunto/conjunto de NA''s NA en lugar de 0?



replace na with 0 in r (1)

Puedes probar

f1 <- function(x) if(all(is.na(x))) NA_integer_ else sum(x, na.rm=TRUE) aggregate(.~name, test, FUN=f1, na.action=NULL)

O

library(dplyr) test %>% group_by(name) %>% summarise_each(funs(f1))

O

library(data.table) setDT(test)[, lapply(.SD, f1), name]

La función suma devuelve 0 si se aplica a un conjunto vacío. ¿Hay una manera simple de hacer que devuelva NA si se aplica a un conjunto de valores de NA?

Aquí hay un ejemplo prestado :

test <- data.frame(name = rep(c("A", "B", "C"), each = 4), var1 = rep(c(1:3, NA), 3), var2 = 1:12, var3 = c(rep(NA, 4), 1:8)) test name var1 var2 var3 1 A 1 1 NA 2 A 2 2 NA 3 A 3 3 NA 4 A NA 4 NA 5 B 1 5 1 6 B 2 6 2 7 B 3 7 3 8 B NA 8 4 9 C 1 9 5 10 C 2 10 6 11 C 3 11 7 12 C NA 12 8

Me gustaría tener por nombre la suma de las tres variables. Esto es lo que intenté:

var_to_aggr <- c("var1","var2","var3") aggr_by <- "name" summed <- aggregate(test[var_to_aggr],by=test[aggr_by],FUN="sum", na.rm = TRUE)

Esto me da:

name var1 var2 var3 1 A 6 10 0 2 B 6 26 10 3 C 6 42 26

Pero yo necesito:

name var1 var2 var3 1 A 6 10 NA 2 B 6 26 10 3 C 6 42 26

La suma para el nombre A, var3 debe ser NA y no 0. (para ser claros, no debe ser NA para el nombre A, var1, donde el conjunto contiene un NA, pero también valores válidos que deben resumirse). ¿Algunas ideas?

He estado jugueteando con na.action pero sum no parece aceptar esto.