В настоящее время я собираюсь отслеживать байесовские знания в R, а часть моего кода должна исключать студентов, которые имеют менее 3 экземпляров на данном KC, иначе оценки параметров не будут сходиться. Таким образом, чтобы сделать это, я в настоящее время:фильтрация списка в R
by_user = split(one_kc, one_kc$Anon.Student.id)
obs_by_user = sapply(by_user, nrow)
valid_users = names(obs_by_user[obs_by_user > 2])
student_outcomes = one_kc[one_kc$Anon.Student.id %in% valid_users,]
Но по какой-то причине, когда я смотрю на by_user в моей среде, недопустимые пользователи все еще перечислены там, и если я пытаюсь запустить кривой фитинг, значение не сходятся, и я считаю, что это причина. Где я иду не так?
редактировать: здесь больше кода, что я работаю с в настоящее время:
df <- data.frame(read.table(file=file.choose(),na.strings="NA",sep="\t",quote="",header=TRUE, fill=TRUE))
df_subset <- df[,c(5,21,27,39,38)]
df_subset$Accuracy <- as.numeric(as.vector(df_subset$Accuracy))
df_subset <- na.omit(df_subset)
kc_list <- unique(df_subset$KC.Model.2A.)
#loop on the kc_list
for (kc in kc_list)
{
print(kc)
one_kc <- df_subset[ which(df_subset$KC.Model.2A.==kc), ]
one_kc <- one_kc[,c(1,3)]
# remove users with few observations on this skill
by_user = split(one_kc, one_kc$Anon.Student.id)
obs_by_user = sapply(by_user, nrow)
valid_users = names(obs_by_user[obs_by_user > 2])
student_outcomes = one_kc[one_kc$Anon.Student.id %in% valid_users,]
by_good_user = split(student_outcomes$Accuracy, student_outcomes$Anon.Student.id)
}
Возможно, вы захотите ознакомиться с этой [ссылкой] (http://stackoverflow.com/help/mcve) о минимальном рабочем примере. Было бы очень полезно, если бы вы опубликовали общую структуру своих данных. т.е. 'df <- data.frame (Anon.Student.id = 1:10, Точность = rnorm (10))' Чтобы мы могли воспроизвести вашу проблему! – David