2017-08-24 57 views
-1

我被要求使用state.x77數據集並查找由state.division定義的每個分區的最小收入,然後使用state.name來查找狀態的名稱在新英格蘭有最低收入。我收到了一些奇怪的答案。有誰知道我做錯了什麼?R中的state.divsion索引

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

這是你的功課?如果是這樣,你的老師是否只是教你關於dplyr的groupby和filter? – aku

+0

我還沒有用過那麼多。我認爲我們需要使用state.division和state.name。否則,我認爲我們對任何事情都是開放的。 –

回答

0

我個人傾向於直行dplyr,在這裏,如果你想保留的所有最低值的行,你可以使用任何

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

(如,如果有兩個最小值)或

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

如果你只想要一個最小值的行。

如果你想只使用基礎包,你可以嘗試使用ave()min

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