在dplyr中排序会产生错误的输出

时间:2016-08-01 19:51:58

标签: r sorting dplyr

dplyr中的arrange()产生不正确的结果。

library(dplyr)
x <- as.data.frame(cbind(name=c("A","B","C","D"), val=c(0.032, 0.077, 0.4, 0.0001)))
x.1 <- x %>% arrange(val)
x.2 <- x %>% arrange(desc(val))

输出结果为:

   name  val
1    A   0.032
2    B   0.077
3    C   0.4
4    D   1e-04

>x.1
   name  val
1    A   0.032
2    B   0.077
3    C   0.4
4    D   1e-04

> x.2
   name     val
1    D   1e-04
2    C   0.4
3    B   0.077
4    A   0.032

升序和降序排序都会产生错误的输出。 不确定我在这里做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:3)

as.data.frame(cbind())就是你在那里做错了。所有内容都转换为cbind()中的字符,然后计入as.data.frame()。看看......

str(x)
# 'data.frame': 4 obs. of  2 variables:
#  $ name: Factor w/ 4 levels "A","B","C","D": 1 2 3 4
#  $ val : Factor w/ 4 levels "0.032","0.077",..: 1 2 3 4

我不知道人们在哪里学习这种创建数据框架的方法,但这是一种可怕的做法,不应该被使用。

使用data.frame()创建数据框,以及它的原因(或使用 dplyr 时,还有data_frame())。

library(dplyr)
x <- data.frame(name=c("A","B","C","D"), val=c(0.032, 0.077, 0.4, 0.0001))
x.1 <- x %>% arrange(val)
x.2 <- x %>% arrange(desc(val))

x.1
#   name    val
# 1    D 0.0001
# 2    A 0.0320
# 3    B 0.0770
# 4    C 0.4000

x.2
#   name    val
# 1    C 0.4000
# 2    B 0.0770
# 3    A 0.0320
# 4    D 0.0001