2017-07-27 1 views
-1

Vous vous demandez si ce qui suit est un bug ...pour ne pas donner la réponse correcte après map_dbl

cadre de données

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

Quelques opérations

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

--LOOK À DONNÉES

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 

donne réponse incorrecte, mais

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

donne la bonne réponse. Est-ce que je fais quelque chose de mal?

+0

@est-ce que ma réponse est claire? – Wen

Répondre

0

order en R retournera la position triée dans la liste originale de commande retourne une permutation qui réorganise son premier argument en ordre croissant ou décroissant

par exemple:

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 

que vous cherchez rang Retourne les rangs des échantillons du val ues dans un vecteur

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

Merci pour l'explication ... Je * cherchais «rank'» – CPak

+0

@ChiPak heureux d'aider ~ belle journée – Wen

0

Par défaut, order a decreasing = FALSE. Ce qui signifie qu'il donne ordre croissant. Pour obtenir l'ordre de plus bas que nous pouvons faire

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

Cela fonctionne, mais pourquoi l'ordre est-il lorsque 'decreasing = FALSE' est égal à' 3 1 2'? Ne devrait-il pas donner '2 3 1'? – CPak

+0

N ° 30 <40 <90. Donc l'ordre est correct – dww

+0

Et 'a' == 'a' ..... Quelle devrait être la réponse à 'order (df2, décroissant = FALSE)'? – CPak