gpt4 book ai didi

r - 如何让 R 忽略 N/A 值而不删除整行?

转载 作者:行者123 更新时间:2023-12-01 11:14:00 25 4
gpt4 key购买 nike

我正在处理一个大数据集(大约 40 列),我需要按月汇总不同列的值,对月内的值求平均值。数据集看起来像这样。

dd <-
mo yr Na NH4 NO2
1 2009 0.4 N/A N/A
1 2009 0.2 0.1 N/A
2 2009 0.5 0.6 0.4
2 2009 0.7 0.2 0.1

我用过

dd.agg=aggregate(.~mo+yr, dd, FUN=mean)

创建一个新的数据集,但是由于我在 NO2 列中有一些 N/A 数据(我不能删除它们或将它们更改为 0,因为它们是由于采样过程中的某些问题造成的),整个一月份从 dd.agg 数据集中删除。我尝试添加 na.rm=TRUE,但它似乎没有帮助。

本质上,我需要的是让 R 忽略 N/A 数据的存在。不要像对待 0 那样对待它们(这会影响平均值),而是从该数据集中获得类似这样的东西

dd.agg <-
mo yr Na NH4 NO2
1 2009 0.3 0.1 N/A
2 2009 0.6 0.4 0.25

如果整个月由 N/A 组成,因为平均值只是一个 N/A 值(或一个空单元格,这对我来说并不重要,因为我在图中不需要它们)以及何时一个月只有几个 N/A,以平均非 N/A 值。我可以逐行执行相同的聚合过程,然后手动将所有内容放入新数据集中,但是对于 40 列来说有点痛苦......有什么想法吗?

最佳答案

我们可以使用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/AR中不被视为NA。在尝试此操作之前,应首先将其转换为 NA

在使用 read.table/read.csv 读取数据时,使用 na.strings 指定将要为 NA 的元素

dd <- read.csv('file.csv', na.strings = "N/A")

数据

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 - 选项)

关于r - 如何让 R 忽略 N/A 值而不删除整行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55701560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com