1

さまざまな条件下での患者の喘息症状の重症度を表すデータがあります。重大度変数は順序付けされた要因であり、すべて同じレベル (軽度 < 中度 < 重度) です。簡単な例を次に示します。

# Create example data frame
df <- data.frame(
  ID = c(1:5),
  Daytime = c("Mild", "Severe", "Mild", "Moderate", "Moderate"), # severity of daytime symptoms
  Sleep = c("Moderate", NA, "Mild", "Mild", "Moderate"), # severity of nighttime symptoms
  Activity = c("Mild", "Moderate", "Mild", "Moderate", "Severe") # severity of symptoms during activity
  )

# Specify order of factor levels
df$Daytime <- ordered(
  df$Daytime,
  levels = c("Mild",
             "Moderate",
             "Severe")
  )
df$Sleep <- ordered(
  df$Sleep,
  levels = c("Mild",
             "Moderate",
             "Severe")
  )
df$Activity <- ordered(
  df$Activity,
  levels = c("Mild",
             "Moderate",
             "Severe")
)

df

結果のデータ フレームは次のようになります。

  ID  Daytime    Sleep Activity
1  1     Mild Moderate     Mild
2  2   Severe     <NA> Moderate
3  3     Mild     Mild     Mild
4  4 Moderate     Mild Moderate
5  5 Moderate Moderate   Severe

患者の全体的な重症度 = 3 つのカテゴリ (日中、睡眠、および活動) のいずれかで報告された最も深刻な症状である「全体的な重症度」変数を作成しようとしています。つまり、「全体」は、「日中」「睡眠」「活動」の最高レベルです。結果は次のようになります。

  ID  Daytime    Sleep Activity  Overall
1  1     Mild Moderate     Mild Moderate
2  2   Severe     <NA> Moderate   Severe
3  3     Mild     Mild     Mild     Mild
4  4 Moderate     Mild Moderate Moderate
5  5 Moderate Moderate   Severe   Severe

大きくてぎこちないループを書かずにやりたいのですがfor、方法がわかりません。でできるかもしれないと思っave()たのですが、一度に複数の変数で動作しないようです:

> df$Overall <- ave(c(df$Daytime, df$Sleep, df$Activity),
+                 df$ID,
+                 FUN = function(i) max (i, na.rm=T)
+                 )
Error in `$<-.data.frame`(`*tmp*`, "Worst", value = c(2L, 3L, 1L, 2L,  : 
  replacement has 15 rows, data has 5

これを行うことができる適用機能はありますか?

4

1 に答える 1

4

これを行う簡単な方法の1つは次のとおりです。

df$Overall <- apply(df[,2:4], 1, max, na.rm=T)
于 2014-08-18T18:29:59.820 に答える