关于 R 中的循环

About loops in R

我是R初学者,现在有一个任务,就是对一个数据集做数据清洗。这个数据集有超过 10,000 行。我的工作是分析每个参与者的准确性,并丢弃准确性低的参与者。此外,每个参与者在此数据集中回答了 200 个问题。此外,还有一列用于准确度。在该列中,“1”表示正确,“0”表示错误。



这是数据集的样子。该数据集中有 100 多个参与者。我不知道我可以使用哪个循环。这是我到目前为止得到的。如果我不使用循环来做,那么我至少会做 100 次....

participant1 = dataset_name[dataset_name$Participant_ID == 1,] 
mean(participant1$Participant_accuracy)

我生成了一些虚拟数据来帮助您。正如@SymbolixAU 指出的那样,可能没有必要使用 for 循环。我们可以使用 aggregatewhich 函数,或者我们可以使用 dplyr 包。

生成虚拟数据

我首先创建一个数据集,其中包含一个 ID 列和一个准确性指标列。任何一行准确的概率是 0.8.

set.seed(123)
df1 <- data.frame(ID = rep(1:10, each = 20),
                  Accuracy = rbinom(200, 1, prob = .8))

计算

然后,我们使用 aggregate 函数计算每个 ID 的准确性列的平均值。

df1.sum <- aggregate(Accuracy ~ ID, FUN = mean, data = df1)

#    ID Accuracy
# 1   1     0.70
# 2   2     0.80
# 3   3     0.90
# 4   4     0.85
# 5   5     0.85
# 6   6     0.70
# 7   7     0.80
# 8   8     0.90
# 9   9     0.90
# 10 10     0.75

使用计算对数据进行子集化

使用此结果,我们可以 select 通过的 ID(即准确度 >= 80%)。我们可以使用这个 ID 列表来对我们的数据进行子集化

pass_ids <- df1.sum[which(df1.sum$Accuracy >= .8), 1]
df1_pass <- df1[df1$ID %in% pass_ids, ]

dplyr

或者,我们可以使用 dplyr 包。 图书馆(dplyr)

df1_pass2 <- df1 %>%
    group_by(ID) %>%
    filter(mean(Accuracy) >= 0.8)