在r中相交比较向量

时间:2018-05-24 13:33:49

标签: r vector compare intersect

我有一个带有4个colums的数据框,这里是结构。

我想创建一个值为1的新向量(valuetofind),如果我的所有行都有数字1,那么如果我的所有行的数字都是-1,则为-1。 其他人只需填写NA。

str(results)
'data.frame':   435 obs. of  4 variables:
 $ model.knn: Factor w/ 2 levels "-1","1": 2 2 2 2 2 2 2 1 2 2 ...
 $ p.arbre  : Factor w/ 2 levels "-1","1": 2 2 1 1 2 2 2 1 2 2 ...
 $ p.svm    : Factor w/ 2 levels "-1","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ p.rf     : Factor w/ 2 levels "-1","1": 2 2 2 1 2 2 2 1 2 2 ...


model.knn p.arbre p.svm p.rf  Valuetofind
    1        1      1    1         1
   -1       -1      1    1        NA
   -1       -1     -1   -1        -1

我一直在尝试很多东西,但我被封锁了

我试图转换为数字,我的数据框中的facor。它给了我2和1的值,我的-1和1。

1 个答案:

答案 0 :(得分:0)

使用嵌套ifelse()rowSums()进行base解决方案。

results <- data.frame(model.knn = c(1, -1, -1), p.arbre = c(1, -1, -1), p.svm = c(1, 1, -1), p.rf = c(1, 1, -1))

results["Valuetofind"] <- ifelse(rowSums(results) == ncol(results), 1, 
                                  ifelse(rowSums(results) == -ncol(results), -1, NA))

results
  model.knn p.arbre p.svm p.rf Valuetofind
1         1       1     1    1           1
2        -1      -1     1    1          NA
3        -1      -1    -1   -1          -1

如果有多个dplyr::case_when()嵌套,您可以尝试ifelse()