2015-12-09 28 views
5

cách lấy trung bình của hai cột của bảng dữ liệu bằng dplyr? Ví dụ, nếu dữ liệu của tôi nếu như dưới đây:Làm thế nào để có được mức trung bình của hai cột sử dụng dplyr?

dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 

Tôi muốn tạo một cột mới "trung bình" mà là giá trị trung bình của cột A và B cho mỗi hàng:

dt %>% mutate(Avg=mean(c(A, B), na.rm=T)) 

Nhưng mã này không cho tôi kết quả chính xác. làm như thế nào? Cảm ơn nhiều.

+1

Bạn có thực sự cần 'dplyr'? –

+0

Tính toán trung bình là một bước trong tất cả các phép tính của tôi, tôi cần sử dụng dplyr cho các phép tính khác. – Carter

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

Trả lời

11

Nếu bạn muốn sử dụng dplyr để đạt được điều này, tôi sẽ đề nghị sử dụng chức năng rowwise():

R> library(dplyr) 
    R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 
    R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T)) 
    R> j 
Source: local data frame [5 x 3] 
Groups: <by row> 

     A  B Avg 
    (int) (dbl) (dbl) 
1  1  1 1.0 
2  2  4 3.0 
3  3 NA 3.0 
4  4  6 5.0 
5  5  8 6.5 
6

Làm thế nào về

dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T)) 

mean không vector hóa. Nó thu gọn tất cả các yếu tố đầu vào thành một giá trị duy nhất. Nếu bạn tạo ma trận với cbind(), bạn có thể sử dụng rowMeans để thực hiện thủ thuật.

+0

đây là giải pháp làm việc duy nhất cho tôi, cảm ơn rất nhiều. –

1

Khi dữ liệu ban đầu là data.table, chúng ta có thể sử dụng data.table phương pháp

dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)] 
dt 
# A B Avg 
#1: 1 1 1.0 
#2: 2 4 3.0 
#3: 3 NA 3.0 
#4: 4 6 5.0 
#5: 5 8 6.5 
Các vấn đề liên quan