2016-08-01 64 views
0

dplyr中的arrange()會產生不正確的結果。在dplyr中排序會產生不正確的輸出

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 

升序和降序順序排序產生不正確的輸出。 不確定我在這裏做錯了什麼? 謝謝。

+3

'as.data.frame(cbind())'是你在做什麼錯了。所有內容在'cbind()'中轉換爲字符,然後將'as.data.frame()'分解。使用'data.frame()'創建數據框架,這就是爲什麼它在那裏。 –

+2

當你遇到這些問題時,一個好的做法是使用'str'來檢查變量的類。目前,由於上述原因,您的變量是因素 – Sumedh

+0

@RichardScriven重新打開它。它發生了很多次,我發佈的答案也是如此。 – akrun

回答

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