我正在尝试使用order
函数来订购表格的一列,
a<-c("-2","-7","-4")
b<-c("9","-1","3")
z<-data.frame(a,b)
当我想按a列从最大到最小排序Z时,它不起作用。该函数按其绝对值对负值进行排序。
z[order(z$a,decreasing=TRUE),]
我正在尝试使用order
函数来订购表格的一列,
a<-c("-2","-7","-4")
b<-c("9","-1","3")
z<-data.frame(a,b)
当我想按a列从最大到最小排序Z时,它不起作用。该函数按其绝对值对负值进行排序。
z[order(z$a,decreasing=TRUE),]
如果您需要将因子转换为数字,则必须按照常见问题解答所述,首先转换为字符 tna,然后再转换为数字:
str(z)
#'data.frame': 3 obs. of 2 variables:
# $ a: Factor w/ 3 levels "-2","-4","-7": 1 3 2
# $ b: Factor w/ 3 levels "-1","3","9": 3 1 2
z[order( as.numeric(as.character(z$a)), decreasing=TRUE ), ]
a b
1 -2 9
3 -4 3
2 -7 -1
(说明:因子,除非它们当然是“有序因子”,否则它们不是有序的,并且与“>”或“<”的比较将返回 NA。
> z$a[1] > z$a[2]
[1] NA
Warning message:
In Ops.factor(z$a[1], z$a[2]) : > not meaningful for factors
在你的努力中被命令的是对数字的内部强制,这不是你所期望的。)
> z$a
[1] -2 -7 -4
Levels: -2 -4 -7
> as.numeric(z$a)
[1] 1 3 2
这是一个简单的向量:
x <- c(2, 4, 0.5, -0.5 ,-1, 3,10)
print(x)
2.0 4.0 0.5 -0.5 -1.0 3.0 10.0
> order(x)
5 4 3 1 6 2 7 # Not cool
> match(x, sort(x))
4 6 3 2 1 5 7 # Cool