R语言如何替换表格中的“万”字

前几天帮人写代码,处理一个表格,他的表格里面有个问题就是希望将1.8万这样的东西处理成18000。

就像是下面这样的:

这个其实对初学者来说比较难,那个同学的做法是将“1.8万”中的“万替换成“*10000”,然后再转换成数值型。其实这样想很正常,刚开始不都这样么。

那么我们就按照错误思维来试一试。

很明显,产生了NA,缺失值。

 

那么正确的做法是什么样的??

如下:

t_a 是新建一个向量,然后使用stringr包的str_detect()函数检验这个向量里面是否含有”万“这个字,如果向量原子里面有”万“这个字的,就判断为TRUE,不然就是FALSE

将结果为TRUE的原子选出来然后把万用”“替换掉。再转换为数值型然后乘以10000

如下图:32行的str_replace()函数将1.8万里面的万用空的双引号替换掉,实际上,这个双引号里面什么都没有,都没有空格

然后33行下面得到一个结果,”1.8“这里的1.8是字符型。

然后在37行将字符型转换成数值型然后再乘以10000即可,从而可以替换。

下面就是一个向量化操作,因为stringr包支持对字符向量进行操作,毕竟我们不是为了一个一个改,是批量化处理。

40行到41行是将含有“万”的位置找出来,然后将这个位置的原子里面的万给用空白替换掉。然后再把它放回去。简单的来说就是有一排干干净净的苹果,将带有伤疤的苹果用刀削掉,然后再把苹果放回原处。这样都没有伤疤虫眼了,哈哈哈

上面就是最终的结果。

实际上,上面适用于1.8, 2.0, 1.8万都是以万为单位的。而1.8万代表是多出来的万

如果是这样的数组怎么办。就是不是所有的转换之后的都要乘以10000.其实这个也很简单。

52行是将含有万的提出来,然后进行上面操作

然后将整个data转换成数值型,然后进行操作。

 

 

讲解完基础的,然后应用到那个同学问我的案例上,他要将一个excel表格里面的c到j列里面含有万的都要替换成这样的格式,其实很简单啦:数据再我的github上面:docum.xlsx  点击链接到我github上去下载。

代码如下:

library(readxl)
library(stringr)

data <- read_xlsx("docum.xlsx")

for (i in colnames(data)[3:10]) {
  data[str_detect(data[, i, drop = TRUE], 
                  "万"), i] <- as.numeric(as.character(str_replace(
                    data[str_detect(data[, i, drop = TRUE], "万"), 
                         i, drop = TRUE], "万", ""))) * 10000
  data[, i] <- as.numeric(data[, i, drop = TRUE])
} #清洗完毕
#接下来的data就是干净的了

write.csv(data, "clearn_docum.csv")

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值