2017-04-05 61 views
3

我有每個受試者兩個觀察以下數據:子集數據向量與重複觀察

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) 

我想具有SUBJECT數字,是在載體中的數據行,V:

V <- c(8,10,10) 

我怎樣才能獲得數據,其主體編號爲v兩個觀測,並將這些意見重複相同的次數作爲事由相應的號碼出現在第V?

期望的結果:

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) 

我想在運算符%的%一些變化會做的伎倆,但即使一個主題數以V列出了兩次不佔五重複主題數,我只獲得DATA中相應行的一個副本。

我還可以創建一個循環,並追加匹配的意見,但這塊是自舉採樣器內,此選項會顯着增加計算時間。

+1

如果你使用數據自舉保持相同和v變化,你可能要考慮data.table,這並迅速加入到一個子集,像'setDT(DATA); setindex(DATA,SUBJECT); DATA [。(v),on =「SUBJECT」]' – Frank

+0

@Frank我無法運行您的代碼。 'setindex()'導致以下錯誤:_Error:找不到函數「setindex」_。我假設這是'data.table'庫的一部分,還是我誤解了? – Poca

+0

是的,你是對的。如果你的data.table版本在一年左右沒有更新,你可能需要'set2key'。 (改變的功能名稱全部。) – Frank

回答

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.tabledplyr或其他任何將處理左加入sql