簡體   English   中英

使用 apply function 和 if else 語句計算匯總分數

[英]Calculating summary scores using apply function and if else statement

我正在根據兩個 3 項量表計算兩個匯總分數。 我是這樣計算的:

tasksum <- paste("item",c(8,11,12), sep="")
all_data_2$summary_score_task <- apply(all_data_2[,tasksum], 1, sum, na.rm = FALSE)

activesum <- paste("item",c(14,21,25), sep="")
all_data_2$summary_score_act <- apply(all_data_2[,activesum], 1, sum, na.rm = FALSE) 

我想完成以下任務:

  1. 對於summary_score_task,在“item8”為NA的情況下,我想用以下表達式計算匯總分數:((item11 + item12)/2)*3。 如果不是 NA,我想繼續以與上述相同的方式計算匯總分數。

  2. 對於activity_score_act,如果“item21”為NA,我想使用以下表達式計算匯總分數:(2*ibr14 + ibr25)。 如果不是 NA,我想繼續以與上述相同的方式計算匯總分數。

我對 R 有點陌生,所以我將不勝感激。 謝謝。

首先,function rowSums將處理獲取每行總和的簡單情況(並且更有效),盡管使用apply沒有任何問題。

其次,要執行您想要執行的自定義計算集,您可以編寫自己的匿名 function 與 apply 一起使用,這將完全完成您想要的任務。 apply將 margin 參數設置為 1,因為您將 function 應用於輸入數據的每一行。 在無法訪問您的數據的情況下,這是一個示例:

set.seed(2)
all_data_2 <- data.frame(
  item8 = c(rnorm(48), NA, NA),
  item11 = rnorm(50),
  item12 = rnorm(50)
)

tasksum <- paste("item", c(8, 11, 12), sep = "")
  
all_data_2$summary_score_task <- 
  apply(all_data_2[,tasksum], 1, function(x) {
    # Note I am using the fact that I know the first element is item8
    if (is.na(x[1])) {
      ((x[2] + x[3])/2)*3
    } else {
      sum(x, na.rm = T)
    }
  })

我認為你可以非常相似地完成第二個任務。 執行此操作后檢查您的數據並確認它正在執行您想要的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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