2015-03-07 14 views
7

Thông thường với dplyr/tidyr, tôi có thể đạt được loại trừ với phủ địnhtrừ với '-' khi sử dụng phiên bản chuỗi (nhấn mạnh hậu tố như gather_()) của dplyr/chức năng tidyr

... %>% gather(x, -y) 

Tuy nhiên, hiện nay, tôi muốn có một số biến được xác định theo chương trình được loại trừ, vì vậy lý tưởng

...%>% gather_ (xVar, -yVar)

nơi xVar và yVar là các biến nhân vật (ví dụ, với các giá trị ' x 'và' y ').

Loại trừ chỉ đơn giản là không được phép với các phiên bản chuỗi hàm hoặc có cách nào để thực hiện chúng không?

Cả hai thủ phạm rõ ràng -yVarpaste0('-', yVar) dường như tạo ra lỗi.

+1

Tôi nghĩ đây là cách sử dụng tốt cho 'kết quả phù hợp', xem ví dụ ở cuối'? Select'. Tôi ngạc nhiên khi bạn đang sử dụng 'gather()' làm ví dụ của bạn, nó nằm trong 'tidyr', không phải' dplyr'. – Gregor

+0

được sửa đổi thành tidyr/dplyr – daj

+0

Có lẽ bạn cũng có thể chỉnh sửa nó thành một cuộc gọi 'thu thập 'hợp lệ, với dữ liệu ví dụ? Sau 'dữ liệu', hai đối số' thu thập' tiếp theo là 'khóa' và' giá trị' ... Tôi không nghĩ "không phải cột y" là một đối số tốt cho 'giá trị'. (Hoặc sử dụng một hàm khác, tôi đang gặp rắc rối khi nghĩ về một ca sử dụng cho một cột phủ định trong 'gather()' ... một ví dụ với dữ liệu dựng sẵn sẽ làm cho nó rõ ràng). – Gregor

Trả lời

3

Gần đây tôi đã gặp sự cố tương tự. Tôi đã sử dụng cách giải quyết tính các cột được bao gồm. Điều này không hoàn toàn thỏa đáng, nhưng tôi không nghĩ rằng điều này hiện có thể với gather_. Vấn đề có vẻ như ở hàm select_vars_. Bạn có thể phá vỡ nó bằng cách sử dụng tùy chọn exclude trong select_vars_.

# creating sample data from example in gather 
stocks <- data.frame(
    time = as.Date('2009-01-01') + 0:9, 
    X = rnorm(10, 0, 1), 
    Y = rnorm(10, 0, 2), 
    Z = rnorm(10, 0, 4) 
) 
# original call using gather 
gather(stocks, stock, price, -time) 
# calculating select_vars yourself 
stocks %>% gather_("stock", 
        "price", 
        names(.)[!"time" == names(.)]) 
# using exclude in select_vars_ 
stocks %>% gather_("stock", 
        "price", 
        select_vars_(names(.), 
           names(.), 
           exclude = "time")) 
Các vấn đề liên quan