Tôi đang cố gắng tìm ra các đối số cho gather
trong gói tidyr
.Trong tidyr, những gì tiêu chuẩn hiện các chức năng `thu thập` sử dụng để ánh xạ một dataframe từ rộng đến dài?
tôi nhìn vào tài liệu, và cú pháp trông giống như:
gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
Có một example trong tài liệu trợ giúp:
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)
)
gather(stocks, stock, price, -time)
tôi tò mò về dòng cuối cùng:
gather(stocks, stock, price, -time)
Ở đây, stocks
rõ ràng là dữ liệu chúng tôi muốn sửa đổi, điều đó là tốt.
Vì vậy, tôi có thể đọc rằng stock
và price
là đối số cho cặp giá trị khóa - nhưng cách chức năng này quyết định cách chọn cột để tạo cặp giá trị khóa này? Các dataframe gốc trông như thế này:
time X Y Z
2009-01-01 1.10177950 -1.1926213 -7.4149618
2009-01-02 0.75578151 -4.3705737 -0.3117843
2009-01-03 -0.23823356 -1.3497319 3.8742654
2009-01-04 0.98744470 -4.2381224 0.7397038
2009-01-05 0.74139013 -2.5303960 -5.5197743
Tôi không thấy bất kỳ dấu hiệu cho thấy chúng ta nên sử dụng bất kỳ sự kết hợp của X
, Y
hoặc Z
. Khi tôi đang sử dụng chức năng này, tôi cảm thấy như tôi chỉ chọn tên cho những gì tôi muốn các cột trong dataframe được định dạng dài của tôi được, và cầu nguyện rằng gather
kỳ diệu hoạt động. Nghĩ lại thì, tôi cũng cảm thấy như vậy khi tôi sử dụng melt
.
Có phải gather
xem loại cột? Làm thế nào để nó bản đồ từ rộng đến dài?
EDIT Great câu trả lời dưới đây, thảo luận vĩ đại dưới đây, và cho bất cứ ai khác muốn biết thêm về triết lý và sử dụng của gói tidyr
chắc chắn nên đọc paper này, mặc dù các họa tiết không giải thích cú pháp.
'-time' nói để sử dụng tất cả các cột ngoại trừ thời gian. Cách tiếp cận khác sẽ là sử dụng 'thu thập (cổ phiếu, cổ phiếu, giá trị, X: Z)', nếu bạn muốn chỉ định cột nào nên được "thu thập". Hoặc thậm chí, 'thu thập (cổ phiếu, cổ phiếu, giá trị, X, Y, Z)'. Về cơ bản, điều này giống với việc sử dụng 'melt' với đối số' measure.vars' thay vì chỉ định 'id.vars' (' melt (stocks,(), (v, = "X", "Y", "Z")) '). – A5C1D2H2I1M1N2O1R2T1