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
升序和降序排序都会产生错误的输出。 不确定我在这里做错了什么? 谢谢。
答案 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