Khi sử dụng "group_by" và "mutate" của dplyr, nếu tôi hiểu chính xác, khung dữ liệu được chia thành các phân đoạn phụ khác nhau theo đối số group_by. Ví dụ, với đoạn mã sau:dplyr group_by và mutate, cách truy cập vào khung dữ liệu
set.seed(7)
df <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
df %>% group_by(let) %>% mutate(mean.by.letter = mean(x))
bình() được áp dụng liên tiếp đến cột x 5 tiểu dfs tương ứng với một lá thư giữa một & e.
Vì vậy, bạn có thể thao tác các cột của các phần phụ nhưng bạn có thể truy cập vào các phần phụ không? Trước sự ngạc nhiên của tôi, nếu tôi thử:
set.seed(7)
data <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
data %>% group_by(let) %>% mutate(mean.by.letter = mean(.$x))
kết quả khác. Từ kết quả này, người ta có thể phỏng đoán rằng "." df không đại diện liên tiếp các dfs phụ nhưng chỉ là dữ liệu "dữ liệu" (chức năng group_by không thay đổi bất kỳ thứ gì).
Lý do là tôi muốn sử dụng chức năng stat lấy khung dữ liệu làm đối số trên từng phần phụ này. Cảm ơn!
Bạn có thể thử với '? Do' – akrun
'do.call (rbind, lapply (split (df, df $ để cho), myfun))' – Frank
I don' t hiểu câu hỏi vì câu trả lời được chấp nhận tạo ra giống như 'data%>% group_by (let)%>% mutate (mean.by.letter = mean (x))' (trừ khi tôi thiếu một cái gì đó) nhưng có thể chậm hơn vì thêm 'do'-call –