我有以下数据,每个主题有两个观察结果:
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采样器中,这个选项会大大增加计算时间.
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.table
或dplyr
或sql
别的东西将要处理左联接.