比较2个数据集,以便仅保留使用R

比较2个数据集,以便仅保留使用R,r,R,我有一个很大的数据集,参与者在其中完成了一项任务的试验。有100个常规试验和10个实践试验。对于这项任务,我们只想保持人们得到正确的试验。我制作了一个单独的数据集,其中包含我的数据,没有异常值和不正确的试验。现在,我陷入了困境,因为我需要找到一种方法,只保留那些仍然拥有至少75%数据的参与者 要简化而不是发布整个大型数据集,它看起来如下所示: subject latency 0003 454 0003 500 0003 600 0004 457 0004

我有一个很大的数据集,参与者在其中完成了一项任务的试验。有100个常规试验和10个实践试验。对于这项任务,我们只想保持人们得到正确的试验。我制作了一个单独的数据集,其中包含我的数据,没有异常值和不正确的试验。现在,我陷入了困境,因为我需要找到一种方法,只保留那些仍然拥有至少75%数据的参与者

要简化而不是发布整个大型数据集,它看起来如下所示:

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

非常感谢你,成功!