【问题标题】:Preventing NAs from being added when importing .csv files - R导入 .csv 文件时防止添加 NA - R
【发布时间】:2015-01-19 17:16:53
【问题描述】:

我会处理大量来自 excel 的 .csv 文件。有时当我使用

导入数据时
data=read.csv("data.csv", header=T)

NA 的列或行将随机添加。如果有人在将数据输入 R 期间使用了其他列,这似乎会发生。

看起来像这样

> df
   v1 v2  X X.1
1   a  1 NA  NA
2   a  1 NA  NA
3   a  1 NA  NA
4   a  0 NA  NA
5   a  0 NA  NA
6   a  0 NA  NA
7   a  1 NA  NA
8   a  1 NA  NA
9   a  0 NA  NA
10  a  0 NA  NA
11  a  1 NA  NA
12  a  0 NA  NA
13  a  1 NA  NA
14  a  1 NA  NA
15  b  1 NA  NA
16  b  1 NA  NA
17  b  0 NA  NA
18  b  0 NA  NA
19  b  0 NA  NA
20  b  0 NA  NA
21  b  0 NA  NA
22  b  0 NA  NA
23  b  0 NA  NA
24  b  1 NA  NA
25  b  1 NA  NA
26  b  1 NA  NA
27  b  1 NA  NA
28  b  1 NA  NA

有没有办法阻止这些被添加? read.csv() 命令中是否有参数?

【问题讨论】:

  • 您的 csv 文件中可能有一些额外的列分隔符... R 正在正确导入它

标签: r excel csv


【解决方案1】:

如果你想去掉所有 NA 值的列:

deNA <- function(df){
    df[,!sapply(df, function(col){all(is.na(col))}, simplify=TRUE),drop=FALSE]
}

然后:

foo = deNA(read.csv("data.csv",header=TRUE))

应该做的伎俩:

foo.csv:

1,2,3,4,,,
2,3,4,5,,6,
5,4,3,2,,,
1,2,3,4,,,

然后

> read.csv("foo.csv")
  X1 X2 X3 X4  X X.1 X.2
1  2  3  4  5 NA   6  NA
2  5  4  3  2 NA  NA  NA
3  1  2  3  4 NA  NA  NA

> deNA(read.csv("foo.csv"))
  X1 X2 X3 X4 X.1
1  2  3  4  5   6
2  5  4  3  2  NA
3  1  2  3  4  NA

【讨论】:

  • 类似选项:df[ ,colSums(is.na(df)) &lt; ncol(df)]
  • 刚刚编辑修复了一个错误并添加了drop=FALSE 以阻止单列数据帧成为向量。也适用于@docendodiscimus 解决方案。这些东西可能已经被微基准测试到死,并且作为解决方案存在于某处。我认为这是一个骗局...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多