比较2个数据集,以便仅保留使用R
我有一个很大的数据集,参与者在其中完成了一项任务的试验。有100个常规试验和10个实践试验。对于这项任务,我们只想保持人们得到正确的试验。我制作了一个单独的数据集,其中包含我的数据,没有异常值和不正确的试验。现在,我陷入了困境,因为我需要找到一种方法,只保留那些仍然拥有至少75%数据的参与者 要简化而不是发布整个大型数据集,它看起来如下所示:比较2个数据集,以便仅保留使用R,r,R,我有一个很大的数据集,参与者在其中完成了一项任务的试验。有100个常规试验和10个实践试验。对于这项任务,我们只想保持人们得到正确的试验。我制作了一个单独的数据集,其中包含我的数据,没有异常值和不正确的试验。现在,我陷入了困境,因为我需要找到一种方法,只保留那些仍然拥有至少75%数据的参与者 要简化而不是发布整个大型数据集,它看起来如下所示: subject latency 0003 454 0003 500 0003 600 0004 457 0004
subject latency
0003 454
0003 500
0003 600
0004 457
0004 600
0005 700
所以受试者在一列,他们的潜伏期在另一列。第二个数据集较小,因为删除了试验。我真的找不到比较这两个数据集的好方法,只保留保留75%或更多数据的主题ID
谢谢大家! 如果您的两个数据集被称为
dt1
和dt2
:
首先找到每个受试者的试验次数,并合并前后表:
library(data.table)
setDT(dt1)
setDT(dt2)
dt3 <- merge(
dt1[, .N, subject],
dt2[, .N, subject],
by = "subject"
)
库(data.table)
setDT(dt1)
setDT(dt2)
dt3 0.75剩余观测值:
subjToKeep <- dt3[, percRemaining := N.y / N.x][percRemaining >= 0.75, subject]
dt2[subject %in% subjToKeep]
subjecteEP=0.75,主题]
dt2[主题%in%subjecteEP]
这里有一个简单的dplyr
解决方案
# example of full dataset
df_full = data.frame(subject = c(1,1,1,1,2,2,2,2,3,3,3,3,4),
latency = 1:13)
# example of smaller dataset
df_small = data.frame(subject = c(1,2,2,2,3,3,3),
latency = c(2,5,6,7,8,10,12))
library(dplyr)
df_full %>% count(subject) %>% # count rows for each subject in full dataset
left_join(df_small %>% count(subject), by="subject") %>% # count rows for each subject in small dataset and join
filter(n.y / n.x >= 0.75) %>% # keep only subjects where we have 75% or more of their data
pull(subject) -> subj_vec # save the subjects as a vector
# use that vector to filter your smaller dataset
df_small %>% filter(subject %in% subj_vec)
# subject latency
# 1 2 5
# 2 2 6
# 3 2 7
# 4 3 8
# 5 3 10
# 6 3 12
非常感谢你,成功!