簡體   English   中英

基於另外兩列創建新列,但在兩者中觀察時均為平均值

[英]Create new column based on two other columns, but average when observed in both

我有兩個數字列score.ascore.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM