【问题标题】:Intersect compare vectors in r在 r 中相交比较向量
【发布时间】:2018-05-24 13:33:48
【问题描述】:

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

如果我的所有行都有数字 1,我想创建一个值为 1 的新向量 (valuetofind),如果我的所有行都有数字 -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

我一直在尝试很多事情,但我被阻止了

我尝试转换为数字,即我的数据框中的因素。它给了我 2 和 1 的值,而不是我的 -1 和 1。

【问题讨论】:

  • 试试as.numeric(as.character())
  • 在@AntoniosK 上展开,尝试2*as.numeric(as.character()) - 1 获取值-1 和1。
  • @RuiBarradas 不好的建议。如果您想对数据做出强有力的假设(或者如果您想将具有两个任意级别的因子转换为 -1、1),您可以执行 2*as.numeric() - 1,但由于级别已经是 "-1" 和 "1", as.numeric(as.character()) 将完美运行,而您建议中的 as.character 是一个错误,会产生不好的结果。
  • @Gregor 对。我发现了另一个错误,OP 想要 -1 或 1 如果所有值都是 -1 或 '1, otherwise NA'。我会回答的。
  • 谢谢,现在转换不是问题。我正在寻找一种将向量与有效方式进行比较的方法

标签: r vector compare intersect


【解决方案1】:

对base 解决方案使用嵌套的ifelse() 和rowSums()。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多