找到r中的行相交

时间:2017-11-15 22:02:11

标签: r intersect

我试图找到受药物影响的共同目标(如下表中的条目编号所示)。

IDARUBICIN <- c(1,5,12,13,18,27,NA,NA,NA,NA,NA,NA)
EPIRUBICIN <- c(1,2,5,6,12,13,17,18,19,21,23,24)
DAUNORUBICIN <- c(1,4,5,11,12,13,16,18,19,27,41,44)
VINBLASTINE <- c(1,4,5,12,13,18,19,27,30,37,39,44)
VINORELBINE <- c(1,5,12,13,18,19,27,41,44,NA,NA,NA)
all <- rbind(IDARUBICIN,EPIRUBICIN,DAUNORUBICIN,VINBLASTINE,VINORELBINE)
> all
             [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
IDARUBICIN      1    5   12   13   18   27   NA   NA   NA    NA    NA    NA
EPIRUBICIN      1    2    5    6   12   13   17   18   19    21    23    24
DAUNORUBICIN    1    4    5   11   12   13   16   18   19    27    41    44
VINBLASTINE     1    4    5   12   13   18   19   27   30    37    39    44
VINORELBINE     1    5   12   13   18   19   27   41   44    NA    NA    NA

我尝试使用正常工作的每一行找到交叉

ans <- Reduce(intersect, list(all[1,],all[2,],all[3,],all[4,],all[5,]))
> ans
[1]  1  5 12 13 18

但我有30行(即30种药物)所以我不能使用这种方法。 有人可以告诉我如何按行找到一个表的相交? 我不能使用上面提到的解决方案,因为它要求我输入每一行而我不想这样做

2 个答案:

答案 0 :(得分:4)

Reduce(intersect, data.frame(t(all)))
# [1]  1  5 12 13 18

不需要额外的依赖!

答案 1 :(得分:1)

function findSequence(goal) {
  function find(start, history) {
    if (start == goal) {
      return history;
    }
    if (start > goal) {
      return null;
    }
    return find(start + 1, "(" + history + " + 1)") ||
             find(start * 2, "(" + history + " * 2)");
  }
  return find(0, "0");
}