读取带空格的 csv 设置字段到 NA
read csv setting fields with spaces to NA
我有一个如下所示的 csv 文件:
A, B, C,
1, 2 1, 3,
3, 1, 0,
4, 1, 0 5,
...
是否可以设置 na.string 以将所有带有 space 的字段分配给 NA(例如 regex
function(x){x[grep(patt="\ ", x)]<-NA;x
}),即
A, B, C,
1, NA, 3,
3, 1, 0,
4, 1, NA,
我们可以遍历列并通过转换为 numeric
将其设置为 NA
df1[] <- lapply(df1, as.numeric)
注意:在这里,我假设列是 character
class。如果是factor
,则执行lapply(df1, function(x) as.numeric(as.character(x)))
我不知道这在 r 中会如何转换,但我会使用以下正则表达式来匹配包含 spaces 的字段:
[^, ]+ [^, ]+
即:
- 除逗号或 space (
[^, ]+
) 之外的一些字符
- 后跟 space (
</code>)</li>
<li>以及除逗号或 space (<code>[^, ]+
) 以外的其他字符
您可以看到它的实际效果 here。
@akrun 答案的变体(我喜欢)。
library(dplyr)
read.csv("test.csv", colClasses="character") %>% mutate_each(funs(as.numeric))
假设所有列都是 character
,这将读取文件,然后将所有列转换为 numeric
,mutate_each
来自 dplyr
。
在读取调用中使用 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
我有一个如下所示的 csv 文件:
A, B, C,
1, 2 1, 3,
3, 1, 0,
4, 1, 0 5,
...
是否可以设置 na.string 以将所有带有 space 的字段分配给 NA(例如 regex
function(x){x[grep(patt="\ ", x)]<-NA;x
}),即
A, B, C,
1, NA, 3,
3, 1, 0,
4, 1, NA,
我们可以遍历列并通过转换为 numeric
NA
df1[] <- lapply(df1, as.numeric)
注意:在这里,我假设列是 character
class。如果是factor
,则执行lapply(df1, function(x) as.numeric(as.character(x)))
我不知道这在 r 中会如何转换,但我会使用以下正则表达式来匹配包含 spaces 的字段:
[^, ]+ [^, ]+
即:
- 除逗号或 space (
[^, ]+
) 之外的一些字符
- 后跟 space (
</code>)</li> <li>以及除逗号或 space (<code>[^, ]+
) 以外的其他字符
您可以看到它的实际效果 here。
@akrun 答案的变体(我喜欢)。
library(dplyr)
read.csv("test.csv", colClasses="character") %>% mutate_each(funs(as.numeric))
假设所有列都是 character
,这将读取文件,然后将所有列转换为 numeric
,mutate_each
来自 dplyr
。
在读取调用中使用 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