2012-01-20 26 views
25

Tôi muốn chia một khung dữ liệu lớn thành danh sách các khung dữ liệu theo các giá trị trong hai cột. Sau đó tôi muốn áp dụng một phép biến đổi dữ liệu chung trên tất cả các dataframes (chuyển đổi trễ) trong danh sách kết quả. Tôi nhận thức được lệnh tách nhưng chỉ có thể làm cho nó hoạt động trên một cột dữ liệu tại một thời điểm.Chia dataframe bằng hai cột dữ liệu và áp dụng biến đổi chung trên danh sách các khung dữ liệu kết quả

Trả lời

6

thế nào về vấn đề này một:

library(plyr) 
ddply(df, .(category1, category2), summarize, value1 = lag(value1), value2=lag(value2)) 

có vẻ như một công việc tuyệt vời cho plyr gói và ddply() chức năng. Nếu vẫn còn câu hỏi mở, vui lòng cung cấp một số dữ liệu mẫu. Tách nên làm việc trên nhiều cột cũng như:

df<- data.frame(value=rnorm(100), class1=factor(rep(c('a','b'), each=50)), class2=factor(rep(c('1','2'), 50))) 
g <- c(factor(df$class1), factor(df$class2)) 
split(df$value, g) 
+0

Cảm ơn câu trả lời! Đã tìm ra rằng tôi cần phải đặt các biến phân chia trong một danh sách và điều đó đã giải quyết vấn đề "tách" bằng cách sử dụng hai vars. Đọc lên trên các gói plyr và nó thực sự là mạnh mẽ. Không thể làm cho nó làm những gì tôi muốn tuy nhiên. Đã thử lệnh này: llply (1: length (List), hàm (i) {temp <-List [[i]] $ a; Danh sách [[i]] $ b <-append (head (temp, -1), na, sau = 0)}) và dự kiến ​​sẽ tìm một biến mới 'b' trong mỗi khung dữ liệu có trong 'Danh sách'. Lệnh in ra danh sách kết quả [[i]] $ b trên màn hình. Tôi đã hiểu lầm điều gì? – user1160760

38

Bạn cần phải đặt tất cả các yếu tố mà bạn muốn chia bởi trong danh sách, ví dụ:

split(mtcars,list(mtcars$cyl,mtcars$gear)) 

Sau đó, bạn có thể sử dụng lapply về vấn đề này để làm bạn muốn làm gì khác

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