2017-10-21 36 views
1
> str(b) 
'data.frame': 2720 obs. of 3 variables: 
$ State  : chr "AL" "AL" "AL" "AL" ... 
$ Hospital.Name: chr "SOUTHEAST ALABAMA MEDICAL CENTER" "MARSHALL MEDICAL 
CENTER SOUTH" "ELIZA COFFEE MEMORIAL HOSPITAL" "ST VINCENT'S EAST" ... 
$ heart attack : num 14.3 18.5 18.1 17.7 18 15.9 19.6 17.3 17.8 17.5 ... 

以上是我的数据框。我想通过状态组,并通过各组内心脏发作进行排名,所以我的代码是这样的:r中的组内排名

c <- group_by(b,State) %>% 
    mutate(rank = order(order('heart attack'))) 

,但我得到了所有的排名列等于值1的结果:

> c 
# A tibble: 2,720 x 4 
# Groups: State [54] 
    State     Hospital.Name `heart attack` rank 
    <chr>       <chr>   <dbl> <int> 
1 AL SOUTHEAST ALABAMA MEDICAL CENTER   14.3  1 
2 AL MARSHALL MEDICAL CENTER SOUTH   18.5  1 
3 AL ELIZA COFFEE MEMORIAL HOSPITAL   18.1  1 
4 AL    ST VINCENT'S EAST   17.7  1 
5 AL DEKALB REGIONAL MEDICAL CENTER   18.0  1 
6 AL SHELBY BAPTIST MEDICAL CENTER   15.9  1 
7 AL HELEN KELLER MEMORIAL HOSPITAL   19.6  1 
8 AL    DALE MEDICAL CENTER   17.3  1 
9 AL  BAPTIST MEDICAL CENTER SOUTH   17.8  1 
10 AL JACKSON HOSPITAL & CLINIC INC   17.5  1 
# ... with 2,710 more rows 

任何人都可以帮我找出为什么它不起作用吗?

+3

运行'订单(订单( '心脏发作') )',你会发现它总是返回1(因为你传递了一个长度为1的字符向量)。我假设你打算使用反引号('''')而不是单引号(''')。 – alistaire

+0

^换句话说,R不会将'心脏病发作'识别为列名。它认为你正在试图告诉它排列单词_heart attack_。把名为'心脏病发作'的列放入并取出额外的'order()',它应该可以正常工作。 –

回答

0

来自alistaire的评论很不错,我经常发现,像这样在链式dplyr命令中逐行执行是非常有用的。我用虹膜作为样本数据集:

library(dplyr) 

temp <- iris %>% 
    group_by(Species) %>% 
    arrange(Sepal.Length) %>% 
    mutate(rank = order(Sepal.Length)) 

返回

R> head(temp) 
# A tibble: 6 x 6 
# Groups: Species [1] 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species rank 
     <dbl>  <dbl>  <dbl>  <dbl> <fctr> <int> 
1   4.3   3.0   1.1   0.1 setosa  1 
2   4.4   2.9   1.4   0.2 setosa  2 
3   4.4   3.0   1.3   0.2 setosa  3 
4   4.4   3.2   1.3   0.2 setosa  4 
5   4.5   2.3   1.3   0.3 setosa  5 
6   4.6   3.1   1.5   0.2 setosa  6 

您还可以使用R中的rank()功能:

temp2 <- iris %>% 
group_by(Species) %>% 
mutate(rank = rank(Sepal.Length)) 

R> head(temp2) 
# A tibble: 6 x 6 
# Groups: Species [1] 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species rank 
     <dbl>  <dbl>  <dbl>  <dbl> <fctr> <dbl> 
1   5.1   3.5   1.4   0.2 setosa 32.5 
2   4.9   3.0   1.4   0.2 setosa 18.5 
3   4.7   3.2   1.3   0.2 setosa 10.5 
4   4.6   3.1   1.5   0.2 setosa 7.5 
5   5.0   3.6   1.4   0.2 setosa 24.5 
6   5.4   3.9   1.7   0.4 setosa 43.0