基于具有重复观察的向量的子集数据

Poc*_*oca 3 r subset

我有以下数据,每个主题有两个观察结果:

SUBJECT <- c(8,8,10,10,11,11,15,15)
POSITION <- c("H","L","H","L","H","L","H","L")
TIME <- c(90,90,30,30,30,30,90,90)
RESPONSE <- c(5.6,5.2,0,0,4.8,4.9,1.2,.9)

DATA <- data.frame(SUBJECT,POSITION,TIME,RESPONSE)
Run Code Online (Sandbox Code Playgroud)

我想要DATA的行,其中SUBJECT数字在向量中,V:

V <- c(8,10,10)
Run Code Online (Sandbox Code Playgroud)

如何从SUB的SUBJECT编号为V的DATA中获取两个观察结果,并且这些观察结果的重复次数与V中相应的SUBJECT编号重复的次数相同?

期望的结果:

SUBJECT <- c(8,8,10,10,10,10)
POSITION <- c("H","L","H","L","H","L")
TIME <- c(90,90,30,30,30,30)
RESPONSE <- c(5.6,5.2,0,0,0,0)

OUT <- data.frame(SUBJECT,POSITION,TIME,RESPONSE)
Run Code Online (Sandbox Code Playgroud)

我认为%in%运算符的某些变化可以解决这个问题,但它没有考虑V中重复的主题数.即使主题数在V中列出两次,我只得到DATA中相应行的一个副本.

我还可以创建一个循环并附加匹配的观察结果,但是这个部分位于一个bootstrap采样器中,这个选项会大大增加计算时间.

the*_*ail 5

merge 是你的朋友:

merge(list(SUBJECT=V), DATA)
#  SUBJECT POSITION TIME RESPONSE
#1       8        H   90      5.6
#2       8        L   90      5.2
#3      10        H   30      0.0
#4      10        L   30      0.0
#5      10        H   30      0.0
#6      10        L   30      0.0
Run Code Online (Sandbox Code Playgroud)

作为@Frank意味着,这个逻辑可以转化为data.tabledplyrsql别的东西将要处理左联接.