2017-10-21 2 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 ... 

위 내 데이터 프레임입니다. 나는 상태로 그룹을 원하는 각 그룹 내에서 심장 마비로 순위를 실시, 그래서 내 같은 코드 :그룹 내의 순위는

> 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 
:

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

하지만 동일한 순위 열의 모든 값 1 결과를 얻었다

왜 작동하지 않는지 알아낼 수 있습니까?

+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