さまざまな条件下での患者の喘息症状の重症度を表すデータがあります。重大度変数は順序付けされた要因であり、すべて同じレベル (軽度 < 中度 < 重度) です。簡単な例を次に示します。
# 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
これを行うことができる適用機能はありますか?