我有一个关于在R中订购数据的问题:
data<-letters
data<-sample(data)
order<-c(1:26)
data<-as.data.frame(cbind(data,order))
data<-arrange(data,order)
data$order
[1] 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 3 4 5 6 7 8 9
如何将订单改为1,2,3,4,5呢?
答案 0 :(得分:4)
as.data.frame(cbind())
的怪物再次袭来。有一个用于创建数据帧的功能。它被称为data.frame()
。用它! ;)
data<-data.frame(data = data,order = order)
data<-arrange(data,order)
当cbind
带有数字向量的因子(或字符)时,如?cbind
中所述,您将获得一个矩阵,因此可能会产生许多不必要的强制。
答案 1 :(得分:3)
不要使用as.data.frame(cbind(数据,订单))#只需使用data.frame
或as.data.frame
请丢掉任何教你的教程。这是令人厌恶的!
答案 2 :(得分:0)
当你cbind
元素时,它们必须是所有相同的类型,当你在as.data.frame
命令中组合这些字符和数值时,你强制一切都是字符,然后当你创建数据时。框架将它们转换为因子。这些是默认排序的词典。如果你希望他们对数字进行排序,我建议你把它们保存为数字。所以
data<-data.frame(data,order)
是一个更好的选择。或者,您可以将标签的字符值转换为数字并排序
data<-arrange(data,as.numeric(as.character(order)))
但那是很多不必要的工作。
答案 3 :(得分:0)
sort(data)
应该做得很好。查看?sort
,因为有一个参数可以选择升序或降序。