R中千分位分隔符数值(美式数值)读取

1. 千分位分割数值

对于英美数值数据,千分位分隔符(逗号分割)很常见,如下面一份房地产销售数据,land.squre.feet, gross.square.feet两列数据。

2. R不能自动识别千分位分割数值

虽然在Excel里面,千分位分隔符数值和普通数值没什么区别,也可以通知设置单元格格式进行转化,但是在R中却有大的区别,即千分位分隔符并不是数值,不能直接做数值计算。

> mean(land.squre.feet)

[1] NA

Warning message:

In mean.default(land.squre.feet) : 参数不是数值也不是逻辑值:回复NA

直接使用as.numeric函数将land.squre.feet转华为R可以识别的数值也不行

> mean(as.numeric(bk$land.squre.feet))

[1] NaN

3. R中识别千分位分割数值的方法

使用gsub()函数,gsub()可以用于字段的删减、增补、替换和切割,可以处理一个字段也可以处理由字段组成的向量。

具体的使用方法为:gsub("目标字符", "替换字符", 对象)

在gsub函数中,任何字段处理都由将“替换字符”替换到“目标字符”这一流程中实现,令替换字符为''''可实现删除,令替换字符为"目标字符+增补内容"可实现增补,替换和切割也是使用类似的操作。

例如:

> text <- "AbcdEfgh . Ijkl MNM"

> gsub("Efg", "AAA", text)     #  将Efg改为AAA,区分大小写

[1] "AbcdAAAh . Ijkl MNM"

在这里也就是要将千分位分隔符“,”去掉,可以使用下列语句:

>land.sqft <-- as.numeric(gsub(",","",land.square.feet)) # 将“,”去除

其结果如下:

> head(bk.homes[,c("land.square.feet","land.sqft")])

   land.square.feet land.sqft

26            2,058      2058

27            4,833      4833

28            2,417      2417

29            3,867      3867

31            2,707      2707

32            2,417      2417

以上语句对于具有货币符合的数值(如$203,001)处理要分两步,先去掉逗号,再去掉$,更一般的是使用以下语句可以一次完成,

>land.sqft <-- as.numeric(gsub("[^[:digit:]]","",land.square.feet))  #[^[:digit:]]表示非数字字符

关于gsub函数的使用,可以参见这篇文章:

R语言-gsub替换字符工具:https://blog.csdn.net/lztttao/article/details/82086346

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章