2015-12-09 67 views
5

如何使用dplyr獲得數據表的兩列的平均值?例如,如果我的數據,如果象下面這樣:如何使用dplyr獲得兩列的平均值?

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

我想創建一個新的欄目「魅力」,這是列A和B的每一行的意思是:

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

但是這個代碼並沒有給我正確的結果。這個怎麼做?非常感謝你。

+1

你真的需要'dplyr'? –

+0

平均值計算是我所有計算的一個步驟,我需要使用dplyr進行其他計算。 – Carter

+0

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

回答

11

如果你想使用dplyr實現這一目標,我會建議使用的功能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

如何

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

mean沒有量化。它將所有輸入摺疊爲單個值。如果你製作一個cbind()的矩陣,你可以使用rowMeans來完成。

+0

這是我唯一的工作解決方案,非常感謝。 –

1

由於初始數據集data.table,我們可以使用data.table方法

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