访问C列中出现的矩阵M1的C列中的因子。矩阵M2 - 在R中

时间:2015-10-27 05:03:35

标签: r dataframe

我有一个73335x2882数据帧df,我想根据列df $ rs的因子提取特定行。为了使我的问题易于理解,我创建了一个迷你数据框u。

> 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

现在,我创建了另一个数据框w。

> 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 个答案:

答案 0 :(得分:2)

你可以尝试,

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

答案 1 :(得分:1)

或者使用data.table,我们会转换' u'到' data.table'并加入' rs' ' w' on' 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