2016-07-21 20 views
13

Tôi có một phần của tập lệnh đã hoạt động tốt trước đây, nhưng gần đây đã tạo ra một câu lệnh kỳ lạ sau nhiều chức năng khác của tôi không hoạt động chính xác. Tôi đang cố gắng chọn vị trí thứ 8 và thứ 23 trong danh sách xếp hạng các giá trị cho mỗi trang web để tìm giá trị phần trăm 25 và 75 cho mỗi ngày trong một năm cho mỗi trang web trong 30 năm. Cách tiếp cận của tôi là như sau (điều chỉnh cho bốn dòng dữ liệu - lát (3) sẽ được lát (23) cho toàn bộ dữ liệu 30 năm tôi thường):Thông báo "Thêm các biến nhóm bị thiếu" trong dplyr trong R

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) 

Trước đây, tôi sẽ bị bỏ lại với một bảng mà có một giá trị trên mỗi trang web để mô tả phần trăm thứ 25 (vì hàm sắp xếp dường như đặt chúng cao nhất đến thấp nhất). Tuy nhiên, bây giờ khi tôi chạy các dòng này, tôi nhận được thông báo:

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

Thông báo này không có ý nghĩa với tôi vì các biến nhóm rõ ràng có trong bảng của tôi. Ngoài ra, một lần nữa, điều này đã làm việc tốt cho đến gần đây. Tôi đã thử:

  • detatch (“plyr”) - kể từ khi tôi có nó nạp trước dplyr
  • dplyr :: group_by - đặt này trực tiếp trong dòng group_by
  • gỡ cài đặt và tái intstalling dplyr, mặc dù đây là một vấn đề khác mà tôi đã gặp phải

Bất kỳ ý tưởng nào tại sao tôi có thể nhận được thông báo này và tại sao nó có thể ngừng hoạt động?

Cảm ơn bạn đã được trợ giúp.

Cập nhật: Thêm ví dụ về dput với một trang web, nhưng giá trị cho ngày 1 tháng 1 trong nhiều năm. Hy vọng sẽ là giá trị vị trí được trả về một khi được nhóm lại, ví dụ slice (3) hy vọng sẽ trả về giá trị 15.6 cho tập con nhỏ hơn này.

+0

Thật kỳ lạ. Khi tôi chạy mã của bạn, nó nói 'Lỗi: tham nhũng 'grouped_df', chứa 0 hàng và 4 hàng trong nhóm'. Bạn không nhận được tin nhắn đó? Có thể bạn cần cung cấp cho chúng tôi nhiều dữ liệu ví dụ hơn. BTW nó rất thích hợp cho bạn để 'dput' dữ liệu. –

+0

Tôi đã nhận được thông báo bị hỏng trước đó, đó là lý do tôi gỡ cài đặt và cài đặt lại dplyr - nhưng tôi nghi ngờ mã sẽ không hoạt động trên bit mà tôi đã cung cấp ở đó vì nó cần nhiều trang, tháng và ngày để nhóm - là một đoạn rất lớn vì vậy tôi đã hy vọng có thể nó chỉ là một vấn đề gói. Xin lỗi - Tôi mới đăng bài ở đây, không chắc chắn dput là gì - nhưng tôi sẽ xem xét nó. – acersaccharum

+0

Chắc chắn, không sao cả. Vì vậy, dput ('? Dput') là lệnh R cốt lõi để tạo điều kiện chia sẻ dữ liệu. Trên StackOverflow, bạn được yêu cầu cung cấp ví dụ về vấn đề có thể tái sản xuất khi bạn khắc phục sự cố lỗi hoặc cảnh báo. Vì vậy, nếu tập dữ liệu của bạn có hàng triệu hàng và nó được gọi là 'mydata' đi vào R và thực hiện điều gì đó như 'dput (mydata [1: 1000,])' và dán kết quả vào pastebin.com và cung cấp cho chúng tôi liên kết chúng tôi có thể giúp bạn.Điều này giả định rằng có đủ dữ liệu trong 1.000 hàng đầu tiên để tái tạo sự cố của bạn. –

Trả lời

25

Vì tính nhất quán, các biến nhóm phải luôn có mặt khi được xác định trước đó và do đó được thêm khi select(value) được thực thi. ungroup nên giải quyết nó:

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

Kết quả yêu cầu là không có cảnh báo:

> 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

Cảm ơn. Đây có phải là những gì OP đang diễn ra không? Thật khó để tôi theo dõi logic của những gì đang cố gắng hoàn thành, nhưng tôi nhận thấy kết quả này chỉ là phần tử đầu tiên của giá trị $ mydata. Đó là những gì bạn muốn @acersaccharum? –

+0

Xin lỗi vì sự chậm trễ - giải pháp này cũng phù hợp với tôi, nhưng khi thực hiện nó, tôi nhận ra rằng tôi chỉ cần thiết cho đến khi đường lát cắt để hoàn thành những gì tôi đang tìm kiếm. Tôi muốn một bảng nơi tất cả các thông tin về trạm và ngày được giữ lại, nhưng cũng có giá trị phần trăm thứ 25 (dựa trên vị trí) được xác định trong cột giá trị. Đơn giản chỉ cần sử dụng biểu thức lên đến dòng slice thực hiện điều này, và vì lý do nào đó tôi phải nghĩ rằng tất cả các giá trị cho mỗi trạm sẽ được giữ lại trong bảng đầu ra trừ khi tôi đã thực hiện bước chọn. Cảm ơn mọi người đã bình luận và giúp đỡ bạn! – acersaccharum

+0

Vì vậy, nếu nó giúp và đó là câu trả lời đúng, hãy dành thời gian để chấp nhận nó bằng cách nhấn nút đánh dấu đó ;-) – Drey

3

Bạn có cập nhật dplyr thời gian gần đây một cách tình cờ? Tôi tự hỏi liệu lệnh gọi dplyr :: arrang của bạn có bị ảnh hưởng bất lợi hay không bởi 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.

Các vấn đề liên quan