次のタイプのデータがあるとします。
df <- data.frame(student = c("S1", "S2", "S3", "S4", "S5", "S2", "S6", "S1", "S7", "S8"),
factor = c("A", "A", "A", "A", "A", "B", "B", "C", "C", "D"),
year = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2),
count1 = c(0, 1, 0, 0, 0, 1, 0, 0, 0, 0),
count2 = c(1, 0, 0, 0, 0, 0, 0, 1, 0, 0))
特定の年の学生とクラスの 2 つの列を分析するには、典型的な apply() 関数よりも効率的な方法が必要です。学生が特定の学年で同じ因子水準を維持している場合、関数はカウント 0 を返します。学生が特定の年に複数の要因レベルにある場合、カウントは、別の要因レベルの学生のインスタンスごとに i+1 更新されます。
何年にもわたってデータセット内の学生を分析するために、別のカウント/機能が必要です。たとえば、何年にもわたって同じ因子レベルを維持している学生は、カウント 0 を受け取ります。学生が別の年に別の因子レベルを持つことが判明した場合、カウントはインスタンスごとに i+1 で更新されます。
10,000 件以上の観測があるため、*apply の試みは非生産的でした。つまり、各学生と要因の一意のインスタンスを数えることができましたが、学生 (一意の ID) と要因のすべての一意のインスタンスではなく、最初の一意のインスタンスのみを数えることができました。個人は、数年以内または数年にわたって繰り返される可能性があります。
理想的な出力は次のとおりです。
Student1,Factor.Count(年内),Factor.Count(年内)