2017-07-27 23 views
-1

想知道下面是一個錯誤正確答案......爲了不使後map_dbl

數據幀

df <- data.frame(Name=rep(letters[1:3],each=3), Value=c(20,40,35,70,80,90,10,20,30)) 

一些操作

library(tidyverse) 
df1 <- split(df, df$Name) %>% 
    map(., ~.x %>% arrange(desc(Value))) 
df2 <- map_dbl(df1, ~head(.x$Value, 1)) 

--LOOK AT DATA

head(df2)

a b c 
40 90 30 

str(df2)

Named num [1:3] 40 90 30 
- attr(*, "names")= chr [1:3] "a" "b" "c" 

--BUG?

order(df2) 
[1] 3 1 2 

給出不正確的答案,但

df2['a'] > df2['c'] 
TRUE 

給出正確的答案。難道我做錯了什麼?

+0

@我的回答是否清楚? – Wen

回答

0

order在R將返回原始列表順序排序位次返回其重新排列的第一個參數爲升序或降序排列

置換例如:

Dat=data.frame(a=c(2,1,4,6,3),b=c(1,2,3,4,5)) 
order(Dat$a) 
[1] 2 1 5 3 4 
Dat[order(Dat$a),] 
    a b 
2 1 2 
1 2 1 
5 3 5 
3 4 3 
4 6 4 

您正在尋找排名返回val的樣本行列Ues in a vector

rank(Dat$a) 
[1] 2 1 4 5 3 
+0

感謝您的解釋...我*是*尋找'排名' – CPak

+0

@ChiPak很高興它的幫助〜美好的一天 – Wen

0

默認情況下,orderdecreasing = FALSE。意思是它給出升序的順序。爲了獲得訂單從最高向下,我們可以做

order(df2, decreasing = TRUE) 
# [1] 2 1 3 
+0

這是有效的,但爲什麼當'decrease = FALSE'等於'3 1 2'時的順序?它不應該給'2 3 1'嗎? – CPak

+0

第30 <40 <90.所以命令是正確的 – dww

+0

和'a'=='a'.....應該怎麼回答'order(df2,decrease = FALSE)'? – CPak