读取空格为NA的csv设置字段

时间:2016-05-19 09:44:02

标签: regex r read.csv

我有一个csv文件,如下所示:

A, B,  C, 
1, 2 1, 3,
3, 1, 0, 
4, 1, 0 5,
 ...

是否可以设置na.string以将所有带空格的字段分配给NA(例如regex function(x){x[grep(patt="\\ ", x)]<-NA;x}),即

A, B, C,
1, NA, 3,
3, 1, 0,
4, 1, NA,

3 个答案:

答案 0 :(得分:2)

我们可以通过转换为NA来循环列并将其设置为numeric

df1[] <- lapply(df1, as.numeric)

注意:在这里,我假设列是character类。如果是factor,请执行lapply(df1, function(x) as.numeric(as.character(x)))

答案 1 :(得分:2)

@ akrun答案的变化(我喜欢)。

character

这会在假设所有列都为numeric的情况下读取文件,然后将所有列从mutate_each转换为dplyr {/ 1}}。

在阅读中使用colClasses="numeric"不起作用(我不知道原因:(),因为

> as.numeric("2 1")
[1] NA

How to read data when some numbers contain commas as thousand separator?我们了解到我们可以创建一个新功能来进行转换。

setAs("character", "numwithspace", function(from) as.numeric(from) )
read.csv("test.csv", colClasses="numwithspace")

给出了

  A  B  C
1 1 NA  3
2 3  1  0
3 4  1 NA

答案 2 :(得分:1)

我不知道这会在中如何翻译,但我会使用以下正则表达式来匹配包含空格的字段:

[^, ]+ [^, ]+

这是:

  • 逗号或空格以外的某些字符([^, ]+
  • 后跟一个空格(
  • 以及逗号或空格([^, ]+
  • 以外的其他字符

您可以在行动here中看到它。