Мы можем использовать na.action = na.pass
aggregate(.~mo+yr, dd, FUN=mean, na.rm = TRUE, na.action = na.pass)
# mo yr Na NH4 NO2
#1 1 2009 0.3 0.1 NaN
#2 2 2009 0.6 0.4 0.25
С tidyverse
, это можно сделать с
library(tidyverse)
dd %>%
group_by(mo, yr) %>%
summarise_all(mean, na.rm = TRUE)
ПРИМЕЧАНИЕ: N/A
нерассматривается как NA
в R
.Сначала его следует преобразовать в NA
, прежде чем пытаться это
При чтении данных с помощью read.table/read.csv
, укажите элементы, которые будут NA
с na.strings
dd <- read.csv('file.csv', na.strings = "N/A")
data
dd <- structure(list(mo = c(1L, 1L, 2L, 2L), yr = c(2009L, 2009L, 2009L,
2009L), Na = c(0.4, 0.2, 0.5, 0.7), NH4 = c(NA, 0.1, 0.6, 0.2
), NO2 = c(NA, NA, 0.4, 0.1)), class = "data.frame", row.names = c(NA,
-4L))
Здесь мы указываем NA
, потому что N/A
является строкой, и это может изменить тип столбца character
или factor
в зависимости от способа его чтения (stringsAsFactors
- опция)