关于 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
循环。我们可以使用 aggregate
和 which
函数,或者我们可以使用 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)
我是R初学者,现在有一个任务,就是对一个数据集做数据清洗。这个数据集有超过 10,000 行。我的工作是分析每个参与者的准确性,并丢弃准确性低的参与者。此外,每个参与者在此数据集中回答了 200 个问题。此外,还有一列用于准确度。在该列中,“1”表示正确,“0”表示错误。
这是数据集的样子。该数据集中有 100 多个参与者。我不知道我可以使用哪个循环。这是我到目前为止得到的。如果我不使用循环来做,那么我至少会做 100 次....
participant1 = dataset_name[dataset_name$Participant_ID == 1,]
mean(participant1$Participant_accuracy)
我生成了一些虚拟数据来帮助您。正如@SymbolixAU 指出的那样,可能没有必要使用 for
循环。我们可以使用 aggregate
和 which
函数,或者我们可以使用 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)