【问题标题】:ignore/remove NA values in read.csv忽略/删除 read.csv 中的 NA 值
【发布时间】:2013-03-26 08:37:03
【问题描述】:

我有一个 csv 文件,如下所示,我使用 read.csv 读入 R,其中 C 列有 12/30 个空值。我想计算出每列的最大值,但是在列 C 上使用 R 函数“max”时返回“NA”。如何让 R 忽略空/NA 值,我看不到“rm.na”在 read.csv 中?

data<-data.frame(read.csv("test.csv"))

data

A   B   C   
1   5   6
15  2   3
8   3   3
7   5   4
5   3   8
4   1   4
5   3   4
2   2   10
4   3   8
6   5   2
1   4   4
10  8   4
0   6   0
7   3   8
5   3   3
13  12  13
6   0   0
0   0   2
5   2   NA
7   3   NA
1   8   NA
11  1   NA
1   4   NA
0   7   NA
4   5   NA
3   10  NA
2   0   NA
6   4   NA
0   19  NA
1   5   NA

> max(C)
[1] NA

【问题讨论】:

  • 为什么不使用max(..., na.rm = TRUE)

标签: r na read.csv


【解决方案1】:

你应该可以使用

max(x,na.rm=TRUE)

【讨论】:

    【解决方案2】:
        data<-na.omit(data)
    

    然后

        max(data)
    

    如果您不想更改数据框,那么

        max(na.omit(data))
    

    【讨论】:

      【解决方案3】:

      我建议在阅读后像其他人建议的那样删除 NA。但是,如果您坚持只读取非 NA 行,您可以使用 bash 工具 linux 删除它们并创建一个新文件:

      grep -Ev file_with_NA.csv NA > file_without_NA.csv
      

      如果你运行 linux 或 mac,你已经有了这个工具。在 Windows 上,您必须安装 MinGW 或 Cygwin 才能获得这些工具。

      【讨论】:

      • 对我来说 NA 必须放在文件名之前:“grep -Ev NA file_with_NA.csv > file_without_NA.csv”
      【解决方案4】:

      你有两个我能想到的选择

       apply(data,2,max,na.rm=TRUE); # this will remove the NA's from columns that contain them
      

      apply(na.omit(data),2,max); ## this will remove the NA rows from the data frame and then calculate the max values
      

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2018-04-24
        • 2020-08-11
        • 1970-01-01
        • 2012-03-19
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        • 2015-10-20
        相关资源
        最近更新 更多