今天我在进行R操作的时候反复出现错误,显示:二进列运算符中有非数值参数,导致错误。
我检查了一下数据,格式如下,有两个列为字符,可能会导致错误
于是我把字符转换了一下
x1$TX<-as.numeric(x1$TX)
x1$CLIN_STG<-as.numeric(x1$CLIN_STG)
再看看数据
现在全是数字了,再运行一下还是错误
这下我就奇怪了,都是数字为什么还是错误,应该没有非数字参数了呀,于是我检查了一下代码,发现是这个代码错了,
在这里产生了字符,确实有字符生成导致了错误
于是我仔细查看了一下数据,最终发现在UNIQID 格式int上
我们查看一下UNIQID的类型,显示整数,但是还是和num有区别的, 在R里面一般认为一个数字就是double类型的numeric数据,比如1; integer数据需要给数字加上后缀L,即1L,或用到as.integer,将数据特别标明是integer类型。
class(x1$UNIQID)
因此在数据进行转换的时候integer会生成字符,导致错误,函数运行失败。知道错误在哪里就好办了。把它转成num就好了。
我们是不能用as.numeric直接进行转换,这样会导致失败
我们可以通过apply程序转换,非常简单就搞定了
x3<-apply(x1,2,function(x1) as.numeric(x1))
我们可以看到数据中已经没有int了,虽然看起来和原来没什么不同
还有另一种方法就是通过矩阵转化,也是一样的
x2<-matrix(as.numeric(x1),nc=7)
colnames(x2)<-colnames(x1)
最后转换好的数据成功运行并生成数据