2015-10-27 33 views
-1

我有一個73335x2882的數據框架df,並且我想根據列df $ rs的因子提取特定的行。爲了讓我的問題可以理解,我創建了一個迷你數據框架u。在矩陣M2的列C'中出現的矩陣M1的列C中訪問因子 - 在R

> rs = c("rs1","rs2","rs3","rs4","rs5") 
> m = matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),nrow=5) 
> u=data.frame(rs,m) 
> u 
rs X1 X2 X3 
1 rs1 1 6 11 
2 rs2 2 7 12 
3 rs3 3 8 13 
4 rs4 4 9 14 
5 rs5 5 10 15 

現在,我創建另一個數據幀瓦特。

> mat = matrix(c(1,2,3,4,5,6),nrow=2) 
> rs = c("rs3","rs5") 
> w = data.frame(rs, mat) 
> w 
    rs X1 X2 X3 
1 rs3 1 3 5 
2 rs5 2 4 6 

我想要做的是現在從u中提取所有行,其中u $ rs包含在w $ rs中。因此,我想獲得一個最終的答案:

rs X1 X2 X3 
3 rs3 3 8 13 
5 rs5 5 10 15 

我曾嘗試沒有成功如下:

> u[w$rs,] 
    rs X1 X2 X3 
1 rs1 1 6 11 
2 rs2 2 7 12 

我也試過

> subset(u, rs == w$rs) 
Error in Ops.factor(rs, w$rs) : level sets of factors are different 
In addition: Warning message: 
In is.na(e1) | is.na(e2) : 
longer object length is not a multiple of shorter object length 

我明白,我可以使用apply(或循環)並驗證u $ rs的每個因子是否爲w $ rs的元素。但我對此並不滿意,因爲它會非常緩慢。

有沒有人有關於如何有效實施這個想法?

非常感謝。

回答

2

你可以試試,

u[u$rs %in% w$rs, ] 
# rs X1 X2 X3 
# 3 rs3 3 8 13 
# 5 rs5 5 10 15 
1

或者使用data.table,我們轉換 'U' 到 'data.table' 與 'W' on 'RS' 的 'RS' 列加入。

library(data.table)#v1.9.6+ 
setDT(u)[w['rs'], on='rs'] 
# rs X1 X2 X3 
#1: rs3 3 8 13 
#2: rs5 5 10 15