2017-08-24 19 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), ]