bior
> a<-read.table("nu.txt")
V1 V2 V3 V4 V5 V6 V7
1 2 6 13 24 26 33 34
2 1 8 11 17 22 23 28
3 3 7 11 16 23 29 35
4 5 6 7 8 18 19 35
5 9 10 11 20 25 26 34
6 6 10 15 17 23 24 34
7 4 7 8 20 27 30 33
8 1 9 18 21 23 25 35
9 1 2 12 15 16 30 33
10 5 9 10 14 17 26 30
通过read.table()读入文本资料,得到以上数据,想转变成数值型数据,但提示错误:
> as.numeric(a)
错误在as.double.default(a) : (串列)目标对象不能强制改变double
请问应该怎么样录入这样的数据才能最终得到数值型数据呢?新手,请见谅。
最后,我的目的是想统计这些数的“频数”,频数最多的排在前面,然后递减。如“1”出在3次,“2”出现两次等,应该用到什么函数呢?
谢谢先!
yihui
1、读进来本来就已经是数值了,为什么还要as.numeric()?
2、参见table()函数。
bior
1、因为从网上拷的,所以可能不是数值型,有没有办法强制转过来?
2、table()后的结果
V2
V1 2 6 7 8 9 10
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
9 0 0 0 0 0 0
, , V3 = 10, V4 = 15, V5 = 22, V6 = 33, V7 = 35
。。。。。。
其它也是这样的零,为什么?
谢谢
yihui
网上拷的为什么就不是数值型?你这些数字又没有带引号,当然是数值,不是字符型。
我只是告诉你求频数可以用table(),你拿起来就对一个data frame用table()了……自己查一查帮助嘛,?table,你是要对整个数据求元素的频数?那首先要把data frame转为一列向量啊,不然怎么能求。
table(unlist(a))
bior
搞定,受益匪浅!!
我是绝对的新手,只是知道R,觉得R好玩:)
就胡乱来了,Anyway! Thanks every much!
yihui
甭客气,有兴趣就最好了,是挺好玩的:)
07072007
as.matrix(a)
yihui
不用as.matrix(),前面说了,已经是数值型了,而且as.matrix()也不能将字符转为数值。
07072007
read.table读进来的都是data frame,虽然看上去是数值,但实际上是个list;因此as.matrix后变成同一类型的matrix。如果读的是字符,再as.numeric一次才是数字。如果读的就是数字(正如楼主的例子),as.matrix之后就已经是有dim属性的numeric vector了。