• R语言
  • 请教:如何把factor转换为数值?

x9 为dataframe,由两列,第一列是表示排序,第二列虽为数据但却显示为factor,无法运算。

请问如何x9变为数值?同时,想保持第一列给定的顺序不变!

先谢谢了!

有关x9的信息如下!(无法上传附件,抱歉)

> is.numeric( x9 )

[1] FALSE

> mode( x9 ); class( x9 )

[1] "list"

[1] "data.frame"

> class( x9[ ,2 ] )

[1] "factor"

> class( x9[ ,1 ] )

[1] "integer"

> is.numeric( x9[ ,1 ] )

[1] TRUE

> is.numeric( x9[ ,2 ] )

[1] FALSE

谢谢!试过了!不行哟!

请教:

直接对x9运算时,

> x9/2

ord m66

34 0.5 NA

35 1.0 NA

36 1.5 NA

37 2.0 NA

38 2.5 NA

第二列都变成了NA,报错信息如下:

Warning message:

In Ops.factor(left, right) : / not meaningful for factors

检查x9:

> str( x9[ ,2 ] )

Factor w/ 1570 levels "-1","-10","-100",..: 1092 1403 279 748 355 931 625 1047 279 1335 ...

> levels( x9[ ,2 ] )

[1] "-1" "-10" "-100"

(中间略)

[1569] "9981" "NULL"

是否与原数据中含有"NULL"有关? 如何把NULL替换为零?

谢谢大家!

自己找了另外一个解决办法!与大家分享一下!也希望大家能再给出更好的办法!

使用fix()函数,在data editor中修改把对应的列修改为numeric,关掉data editor后R自动把你修改的内容传给内存中的变量x9。自己可根据需要再把x9保存以备后用,即save(x9,file=“x9.Rdata”)。

这个办法对很大数据也好用,我的数据dim(x9)=[1] 442730 140。

R代码:

fix(x9)#在弹出来的窗口中自己修改对应的列

save(x9,file=“x9.Rdata”)

或者使用edit()函数,但代码不一样!

x9 <- edit(x9) #不能只使用edit(x9),这样R不会把修改的内容传递给x9

save(x9,file=“x9.Rdata”)

回复 第7楼 的 king64:感觉是"NULL"惹的祸。暂时没查到给数据定义缺失值的方法。如果你的x9是从外部文件读入的话,定义下缺失值比较好。比如:

<br />
read.table("datafile",na.string = "NULL")<br />


这样应该不会出现你说的问题了。
</p>
1 年 后

回复 第7楼 的 king64:不行哦这种方法。。。强制改了之后那一列全部变为了NA。。。

我的办法是

a<-as.character(as.factor(x))

b<-strsplit(a,",",fixed=FALSE,perl=FALSE,useBytes=FALSE) #我自己的各个number之间是用逗号(,)隔开的。。。

v<-as.vector(unlist(b)) #v变成了characte

mode(v)<-'numeric' #v变成了numeric型

写的可能会比较弯,有更好的办法敬请指正。

2 年 后
[未知用户]
我一划分,长度增加了。。。
4 个月 后
我之前也遇到过这种情况,
Warning message: In Ops.factor(left, right) : ‘*’ not meaningful for factors
不过原因很简单,因为数据中存在一个未知的字符#NAME?,用str()检查一下数据的类型再改改就可以了