2016-10-12 17 views
6

Tôi đã đọc tài liệu và tôi đã thử googling tài liệu đó; nó phải là một điều đơn giản, nhưng có vẻ như nó không phải với tôi; vì vậy tôi mạnh dạn bước ra và hỏi xem có ai đó ở đây có thể giải thích cho tôi về cách hoạt động của công cụ between() của dplyr hay không.Dplyr hoạt động như thế nào?

# Explanation documentation 
between(x, left, right) 

x   A numeric vector of values 
left, right: Boundary values 

Tôi hiểu vector là mảng một chiều, vì vậy tôi giả sử c(1:7) là một véc tơ, phải không? Tôi đã cố gắng sử dụng các ví dụ được cung cấp trong tài liệu hướng dẫn làm mẫu để tìm kiếm các chuyến bay Tháng Bảy-Tháng Chín, nhưng sau chỉ trả về một lỗi:

# Example from documentation cont’d 
x <- rnorm(1e2) 
x[between(x, -1, 1)] 

# Loading the library 
library(nycflights13) 

# Execute my hopeless attempt at between() 
flights[between(month, 7, 9)] 

# Output and error message 
> flights[between(month, 7, 9)] 
Error in between(month, 7, 9) : object 'month' not found 

tôi cảm thấy thực sự ngớ ngẩn hỏi này, nhưng bất kỳ sự giúp đỡ trong việc tìm hiểu này sẽ đánh giá cao. Tôi cũng xin lỗi vì không hỏi một câu hỏi được xác định rõ; như có lẽ được đánh giá cao, tôi thực sự không biết làm thế nào để cụm từ nó khác hơn là ‘Tôi không hiểu”.

+0

nó không phải là một câu hỏi về giữa nhưng thay vào việc xác định biến của bạn: bạn đang lọc dataframe của bạn 'flights' bằng cách nói "mất hàng mà tháng biến nằm trong khoảng từ 7 đến 9 ". Nhưng 'month'is không được định nghĩa, và R nói với bạn. Bạn đang tìm kiếm 'chuyến bay [giữa (chuyến bay $ tháng, 7, 9)]'. –

+2

Nếu bạn muốn R hiểu rằng 'tháng' là tên cột trong phạm vi' chuyến bay', bạn có thể làm: 'với (chuyến bay, chuyến bay [giữa (tháng, 7, 9)])' –

+0

R folks đã phát triển một số khái niệm như với _base_, _tidyverse_ và _data.table_. Việc đặt trước và những thứ khác hoạt động hơi khác một chút, điều này thường gây nhầm lẫn. 'dplyr' và' between() 'là một phần của [tidyverse] (https://cran.r-project.org/web/packages/tidyverse/index.html). Cách sử dụng tốt nhất có lẽ là bộ lọc 'chuyến bay%>% (giữa (tháng, 7, 9))' hoặc 'bộ lọc (chuyến bay, giữa (tháng, 7, 9))'. Bạn đã thử sử dụng cơ sở hạ tầng R. Điều này cũng hoạt động (bạn có thể kết hợp mọi thứ), nhưng cần những điều chỉnh được đề cập ở trên. – lukeA

Trả lời

11

between không có gì đặc biệt - bất kỳ chức năng nào khác trong R sẽ dẫn đến cùng một vấn đề. Sự nhầm lẫn của bạn xuất phát từ thực tế là dplyr có rất nhiều hàm cho phép bạn làm việc trên các tên cột data.frame như thể chúng là các biến bình thường; ví dụ:

filter(flights, month > 9) 

Tuy nhiên, between không phải là một trong những chức năng. Như đã đề cập, nó chỉ đơn giản là một chức năng bình thường. Vì vậy, nếu bạn muốn sử dụng nó, bạn cần phải cung cấp các đối số theo cách thông thường; ví dụ:

between(flights$month, 7, 9) 

này sẽ trả về một vector logic, và bây giờ bạn có thể sử dụng nó để chỉ số data.frame của bạn:

flights[between(flights$month, 7, 9), ] 

Hoặc, nhiều dplyr như:

flights %>% filter(between(month, 7, 9)) 

Lưu ý rằng tại đây hiện chúng tôi sử dụng đánh giá phi tiêu chuẩn. Nhưng đánh giá được thực hiện bởi filter, không phải bởi between. between được gọi (bằng filter) sử dụng đánh giá tiêu chuẩn.

+1

Tôi tin rằng câu trả lời này đã trả lời tất cả các câu hỏi của tôi, và cũng vậy. Cảm ơn bạn đã cho biết cách giải quyết một cột cụ thể trong tập dữ liệu và trả lời một cách lịch sự và chính xác. Tôi rất tò mò, về cách tôi nên hiểu đầu ra của dòng mã thứ hai mà bạn cung cấp (giữa (các chuyến bay $ month, 7, 9), nó mang lại một danh sách goolormous các boolean (tất cả chúng là 'FALSE') –

+1

@CannedMan Đầu ra của 'between' là câu trả lời cho câu hỏi" là các giá trị trong X giữa giới hạn của tôi? "Vì vậy, nếu tôi hỏi' giữa (c (5, 3, 4, 6, 2, 9, 3), 3 , 7) 'Tôi sẽ nhận được câu trả lời TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE. Nếu tất cả các giá trị của bạn là' FALSE' có nghĩa là không có tháng nào trong tập dữ liệu 'chuyến bay' nằm trong khoảng từ 7 đến 9 . –

2

Tôi đoán bạn muốn nó như thế này:

library(nycflights13) 
library(dplyr) 

flights %>% filter(between(month,7,9)) 

Tôi nhìn thấy trong khi đó giải pháp này cũng xuất hiện trong các ý kiến.

0

lọc (chuyến bay, giữa (tháng, 7,9)) dường như chỉ làm việc tốt

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