[英]Create new column based on two other columns, but average when observed in both
我有兩個數字列score.a
和score.b
。 我想創建一個新的變量score.c
,它從a或b中傳輸觀察到的分數,但是當它們在兩者中被觀察時,我需要取平均值。
help <- data.frame(deid = c(5, 7, 12, 15, 25, 32, 42, 77, 92, 100, 112, 113),
score.a = c(NA, 2, 2, 2, NA, NA, NA, NA, NA, NA, 2, NA),
score.b = c(4, NA, NA, 4, 4, 4, NA, NA, 4, 4, NA, 4))
創建
deid score.a score.b
1 5 NA 4
2 7 2 NA
3 12 2 NA
4 15 2 4
5 25 NA 4
6 32 NA 4
7 42 NA NA
8 77 NA NA
9 92 NA 4
10 100 NA 4
11 112 2 NA
12 113 NA 4
我希望創建一個看起來像的df
deid score.a score.b score.c
1 5 NA 4 4
2 7 2 NA 2
3 12 2 NA 2
4 15 2 4 3
5 25 NA 4 4
6 32 NA 4 4
7 42 NA NA NA
8 77 NA NA NA
9 92 NA 4 4
10 100 NA 4 4
11 112 2 NA 2
12 113 NA 4 4
例如,在第4行中,它取平均值。
我的嘗試使用了help %>% group_by(deid) %>% mutate(score.c = (score.a + score.b)/2)
但這只處理了兩列中觀察到的數據。
嘗試
help$score.c <- rowMeans(help[2:3], na.rm=TRUE)
或者使用dplyr
的可能方法(未經過徹底測試)
library(dplyr)
help %>%
mutate(val= (pmax(score.a, score.b, na.rm=TRUE)+
pmin(score.a, score.b, na.rm=TRUE))/2)
data.table解決方案將是:
library(data.table)
setDT(help)
help[,.(rMean=rowMeans(.SD,na.rm = T)),.SDcols = c('score.a','score.b')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.