[英]R: How to calculate mean for each row with missing values using dplyr
我想計算包含缺失值的數據框中每行的多個列的均值,並將結果放在一個名為“means”的新列中。 這是我的數據幀:
df <- data.frame(A=c(3,4,5),B=c(0,6,8),C=c(9,NA,1))
A B C
1 3 0 9
2 4 6 NA
3 5 8 1
如果列沒有缺失值,則下面的代碼可以成功完成任務,例如A列和B列。
library(dplyr)
df %>%
rowwise() %>%
mutate(means=mean(A:B, na.rm=T))
A B C means
<dbl> <dbl> <dbl> <dbl>
1 3 0 9 1.5
2 4 6 NA 5.0
3 5 8 1 6.5
但是,如果列缺少值,例如C,則會出現錯誤:
> df %>% rowwise() %>% mutate(means=mean(A:C, na.rm=T))
Error: NA/NaN argument
理想情況下,我想用dplyr實現它。
df %>%
mutate(means=rowMeans(., na.rm=TRUE))
的.
是一個“代詞”,它引用了管道mutate
的數據幀df
。
ABC means 1 3 0 9 4.000000 2 4 6 NA 5.000000 3 5 8 1 4.666667
您還可以使用所有常用方法(列名,索引, grep
等)僅選擇要包括的特定列。
df %>%
mutate(means=rowMeans(.[ , c("A","C")], na.rm=TRUE))
ABC means 1 3 0 9 6 2 4 6 NA 4 3 5 8 1 3
在基數R中也很容易實現:
cbind(df, "means"=rowMeans(df, na.rm=TRUE))
A B C means
1 3 0 9 4.000000
2 4 6 NA 5.000000
3 5 8 1 4.666667
rowMeans
執行計算。並允許na.rm參數跳過缺失值,而cbind
允許您將所需的平均值和任何名稱綁定到data.frame,df。
關於OP代碼中的錯誤,我們可以使用連接函數c
將這些元素作為單個vector
,然后執行mean
因為mean
只能使用一個參數。
df %>%
rowwise() %>%
mutate(means = mean(c(A, B, C), na.rm = TRUE))
# A B C means
# <dbl> <dbl> <dbl> <dbl>
#1 3 0 9 4.000000
#2 4 6 NA 5.000000
#3 5 8 1 4.666667
此外,我們可以使用rowMeans
和transform
transform(df, means = rowMeans(df, na.rm = TRUE))
# A B C means
#1 3 0 9 4.000000
#2 4 6 NA 5.000000
#3 5 8 1 4.666667
或者使用data.table
library(data.table)
setDT(df)[, means := rowMeans(.SD, na.rm = TRUE)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.