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

时间:2017-04-05 22:48:17

标签: 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)

我想要的DATA行包含在向量中的SUBJECT编号,V:

V <- c(8,10,10)

我如何从主题编号为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)

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

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

1 个答案:

答案 0 :(得分: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

正如@Frank所暗示的,此逻辑可以转换为处理左连接的任何其他内容的data.tabledplyrsql