我有一個巨大的數據框與匹配的病例控制科目。匹配的情況:控制是1:3。我正在嘗試重新抽取案例id,然後提取相應的控件。如何重複子集相同的行/ ID
所以,我有一個ids可以重複的向量。我想爲矢量的每個id提取案例和控件的數據。案例和匹配控件具有相同的case_num。 %中的%始終從數據中獲取唯一的ID。我用llply來做到這一點。大約需要2.5秒。有沒有其他有效的方法?
我包括一個簡單的例子和我對問題的解決方案。
在我的情況下,在1921年的ID矢量的長度,功能必須提取控件1921次。所以如果時間可以縮短一秒鐘,實際上我會重複整個過程1000次。謝謝!
test_data=
data.frame(id=c(1,1,2,4,4,5,6),value=c('g','e','r','j','a','b','c'))
test_data
id value
1 1 g
2 1 e
3 2 r
4 4 j
5 4 a
6 5 b
7 6 c
id_vec= c(1,4,1,5)
library(plyr)
newdata.list=llply(id_vec, function(x) test_data[test_data$id==x,])
## or if we make our data a data.table then
library(data.table)
test_data= data.table(test_data)
newdata.list=llply(id_vec, function(x) test_data[id==x])
library(dplyr)
newdata.frame= bind_rows(newdata.list) ### making it a dataframe
newdata.frame
id value
1: 1 g
2: 1 e
3: 4 j
4: 4 a
5: 1 g
6: 1 e
7: 5 b
PLS發佈的數據爲文本,而不是圖像。使用'dput(your_data)'並複製粘貼結果。 – GGamba
做了編輯,並在收到評論後添加了代碼。 –
可能最安全的是不混用plyr + dplyr + data.table;最好選擇1.Plyr已經基本上被dplyr所取代,所以可能不是那個。 – Frank