2017-08-24 1 views
-1

On me demande d'utiliser l'ensemble de données state.x77 et de trouver le revenu minimum pour chaque division définie par state.division, puis d'utiliser le state.name pour trouver le nom de l'état qui est en Nouvelle-Angleterre qui a le revenu minimum. Je reçois des réponses étranges. Est-ce que quelqu'un sait ce que je fais mal?state.divsion index in R

x <- tapply(state.x77$Income, state.division, min) 
x 
New England Middle Atlantic  South Atlantic East South Central 
      3694    4449    3617    3098 
West South Central East North Central West North Central   Mountain 
      3378    4458    4167    3601 
     Pacific 
      4660 
x1 <- tapply(state.x77$Income, state.name[state.division], min) 
x1 
Alabama  Alaska  Arizona Arkansas California Colorado 
    3694  4449  3617  3098  3378  4458 
Connecticut Delaware  Florida 
    4167  3601  4660 
+0

Est-ce vos devoirs? Et si c'est le cas, est-ce que votre professeur vous a juste parlé du groupe et du filtre de dplyr? – aku

+0

Je n'en ai pas utilisé autant. Je pense que nous devons utiliser state.division et state.name. Sinon, je pense que nous sommes ouverts à tout. –

Répondre

0

je tends personnellement à aller tout droit pour dplyr, où vous pouvez utiliser soit

library(dplyr) 
result <- state.x77 %>% 
    group_by(state.division) %>% 
    filter(Income == min(Income)) 

si vous souhaitez conserver toutes les lignes de valeur minimale (comme dans le cas il y a deux minimums) ou

state.x77 %>% 
    group_by(state.division) %>% 
    slice(which.min(Income)) 

si vous ne souhaitez qu'une ligne de valeur minimale.

Si vous souhaitez utiliser uniquement le package de base, vous pouvez essayer d'utiliser ave() avec min:

state.x77[state.x77$Distance == ave(state.x77$Income, state.x77$state.division, FUN = min), ]