2016-07-21 4 views
13

이전에 잘 돌아가는 스크립트가 있었지만 최근에는 다른 많은 기능이 제대로 작동하지 않는 이상한 문구가 생성되었습니다. 각 사이트의 순위 목록에서 8 위와 23 위를 선택하여 30 년 동안 각 사이트의 1 년 동안 매일 25 번째와 75 번째 백분위 수 값을 찾습니다. 전dplyr의 "누락 된 그룹화 변수 추가"메시지

library(“dplyr”) 

mydata 

structure(list(station_number = structure(c(1L, 1L, 1L, 1L), .Label = "01AD002", class = "factor"), 
year = 1981:1984, month = c(1L, 1L, 1L, 1L), day = c(1L, 
1L, 1L, 1L), value = c(113, 8.329999924, 15.60000038, 149 
)), .Names = c("station_number", "year", "month", "day", "value"), class = "data.frame", row.names = c(NA, -4L))  

    value <- mydata$value 
    qu25 <- mydata %>% 
      group_by(month, day, station_number) %>% 
      arrange(desc(value)) %>% 
      slice(3) %>% 
      select(value) 

나는 한 테이블에 남아있을 것입니다 : - (일반적으로 내 전체 삼십년 데이터 세트에 대한 슬라이스 (3)이 될 것입니다 조각 (23)이 4 개 개의 라인 데이터 세트에 맞게) 다음과 같이 내 접근했다 정렬 기능이 가장 높은 순서에서 가장 낮은 순서로 순서를 매기므로 25 번째 백분위 수를 설명하는 사이트 당 하나의 값입니다. 그룹화 변수가 내 테이블에 분명히 존재로

Adding missing grouping variables: `month`, `day`, `station_number` 

은이 메시지는 나에게 이해가되지 않습니다 : 나는이 줄을 실행할 때, 지금, 나는 메시지가 나타납니다. 또한, 이것은 최근까지도 잘 작동했습니다. 나는 시도했다 :

  • 에 달린 것을 빼낸 ("plyr"를 참조) - GROUP_BY 라인에서 직접이 배치
  • 제거하고 dplyr을-intstalling 다시,하지만 - 내가 가진 이후로는
  • dplyr :: GROUP_BY dplyr 전에로드 이것은 내가 겪고있는 또 다른 문제였습니다

왜 내가이 메시지를 받았을 수 있으며 왜 작동을 멈췄을 수도 있습니다.

도움 주셔서 감사합니다.

업데이트 : 한 사이트에 dput 예제가 추가되었지만, 여러 해 동안 1 월 1 일에 대한 값이 추가되었습니다. 예를 들어 slice (3)가이 작은 하위 집합에 대해 15.6 값을 반환하는 것처럼 위치 값이 그룹화되면 반환되는 것이 좋을 것입니다.

+0

이상한 일입니다. 귀하의 코드를 실행할 때 그것은'Error : corrupt 'grouped_df'라고 말하고, 0 행과 그룹에 4 행을 포함합니다. 당신은 그 메시지를받지 못했습니까? 어쩌면 우리에게 더 많은 예제 데이터를 주어야 할 것입니다. BTW에서는 데이터를 '출력'하는 것이 좋습니다. –

+0

이전에 부패한 메시지를 받았는데 dplyr을 제거하고 다시 설치 한 이유는 무엇입니까?하지만 그룹화 할 때 여러 사이트, 월 및 일이 필요하기 때문에 코드가 제대로 작동하지 않을 것으로 생각됩니다. 아주 큰 덩어리가되어서 패키지 문제 일 수 있기를 바랬습니다. 죄송합니다 - 여기에 게시하는 데 익숙하지 않은 경우 어떤 입력인지 확실하지 않습니다. – acersaccharum

+0

물론 문제는 없습니다. 따라서 dput ('? dput')은 데이터 공유를 용이하게하는 핵심 R 명령입니다. StackOverflow에서 오류 또는 경고를 해결할 때 문제를 재현 할 수있는 예제를 제공해야합니다. 그래서 만약 당신이 dataset에 백만 행이 있고 그것을'mydata'라는 R에 들어가서'dput (mydata [1 : 1000,])'과 같은 것을하고 pastebin.com에 결과를 붙여 넣고 우리에게 링크를줍니다. 우리가 너를 도울 수 있다고.이것은 문제를 재현 할 수있는 첫 번째 1,000 개의 행에 충분한 데이터가 있다고 가정합니다. –

답변

25

일관성을 위해 그룹화 변수는 더 일찍 정의 될 때 항상 존재해야하므로 select(value)이 실행될 때 추가됩니다. ungroup를 해결해야합니다

qu25 <- mydata %>% 
    group_by(month, day, station_number) %>% 
    arrange(desc(value)) %>% 
    slice(2) %>% 
    ungroup() %>% 
    select(value) 

요청한 결과는 경고없이 :

> mydata %>% 
+ group_by(month, day, station_number) %>% 
+ arrange(desc(value)) %>% 
+ slice(2) %>% 
+ ungroup() %>% 
+ select(value) 
# A tibble: 1 x 1 
    value 
    <dbl> 
1 113 
+0

감사합니다. 이것이 영업 이익을위한 것입니까? 성취하려는 논리의 논리를 따르는 것이 어렵지만,이 결과가 mydata $ value의 첫 번째 요소라는 것을 알았습니다. 그것이 당신이 @acersaccharum을 원했던 것입니까? –

+0

지연에 대해 유감스럽게 생각합니다.이 솔루션은 저에게도 도움이되지만, 그것을 수행함에있어서, 제가 찾고있는 것을 성취하기 위해 슬라이스 라인까지만 필요하다는 것을 깨달았습니다. 나는 모든 역과 날짜 정보가 유지 된 테이블을 원했지만, 또한 가치 열에서 25 번째 백분위 수 값 (위치 기반)을 확인했습니다. 슬라이스 라인까지의 표현을 사용하기 만하면됩니다. 몇 가지 이유로 나는 선택 단계를 수행하지 않으면 각 스테이션의 모든 값이 출력 테이블에 유지 될 것이라고 생각 했어야합니다. 여러분의 의견과 도움을 주신 모든 분들께 감사드립니다! – acersaccharum

+0

도움을 주시면 정답입니다. 잠깐만 시간을내어 확인 버튼을 눌러서 수락하십시오. – Drey

3

당신은 우연히 최근 dplyr 업데이트 했습니까? 귀하의 dplyr :: arrange 통화가 부정적인 영향을 받았는지 궁금합니다. https://blog.rstudio.org/2016/06/27/dplyr-0-5-0/

Breaking changes arrange() once again ignores grouping, reverting back to the behaviour of dplyr 0.3 and earlier. This makes arrange() inconsistent with other dplyr verbs, but I think this behaviour is generally more useful. Regardless, it’s not going to change again, as more changes will just cause more confusion.