R(一)一次R排错的全过程

关键词:R; 排错; factor; numeric;

女朋友发消息说用R处理数据时又出错了,而且找不到解决办法,只好让我看看。

发过来的原始文件就是一个csv,从文件大小上来看是一个小文件。那首先加载文件到R并看一些各列的情况:
在这里插入图片描述

可以看到中间三列Ch5.Ch6、Ch7.Ch6、Ch8.Ch6的数据类型是factor,而不是预期的numeric类型。女朋友抱怨遇到的问题就是指这个。既然类型不对,那就转换类型呗。利用as.numeric()函数进行转换:
在这里插入图片描述

奇怪,Ch5.Ch6那一列并没有转换成预期的0, 0.003413269等数字,而是5065, 4642这些整数。我立马意识到这些整数是“因子的顺序”,而不是原始的值。其实,进一步查看as.numeric()函数的说明文档可以发现里面提到了这一点:
在这里插入图片描述
在这里插入图片描述

里面提到的示例是:
在这里插入图片描述

既然说明文档里给出了转换类型的正确方法,那我们就重新加载文件试一试:
在这里插入图片描述

上面这张图信息有点多。首先我们注意到经过as.numeric(as.character())的转换后,Ch5.Ch6这一列的确变成我们预想的样子。

但是,转换后出现的警告信息(那一段warning message)说引入了NAs,这提示我那一列中很可能有字母。为什么这么说?因为as.numeric()函数的说明文档里有一个现成的例子说明了这一点:字母”B”的存在让as.numeric()函数引入了NA。
在这里插入图片描述

那我们就通过检查NA的位置来看看那个位置原来的值是不是有字母。
首先来看一下NA出现的位置:
在这里插入图片描述

可以看到,Ch5.Ch6这一列有三行出现了NA。那我们来看看这些行原来的值是不是字母:
在这里插入图片描述

果然,那三行的原始值存在着字母。

至此,原因终于找到了!接下来就是修正这些错误了。你可以直接在原始文件中进行修改,然后重新加载到R中;或者直接加载,然后在R中修改,比如像这样:
在这里插入图片描述

上面一共输入了四个命令,第一个命令重新加载文件到R中;第二个命令将Ch5.Ch6这一列由factor类型转换为numeric类型;第三个命令将Ch5.Ch6中引入的NA全部替换为一个中间数值(比如0);第四个命令确认了Ch5.Ch6这一列已经全部变成了numeric类型。

对另两列Ch7.Ch6、Ch8.Ch6也做类似处理。至此,一个排错的过程就全部展现在这里了。这件事情再次提醒我两点:阅读说明文档可以让你少犯错!数据清洗是多么重要,如果这一步偷懒,后面要花更多精力来排错!

如果有任何建议欢迎交流!

(公众号:生信了)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值