今天我在进行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)
最后转换好的数据成功运行并生成数据

1858

被折叠的 条评论
为什么被折叠?



