【问题标题】:R:Finding rows which meet conditionsR:查找满足条件的行
【发布时间】:2013-10-19 05:22:52
【问题描述】:

我已经看到了一些关于此的主题并制定了一个半答案,但我所需要的与我所看到的略有不同。我正在寻找满足某些条件的行下方的行。这显然是一个条件本身,但我不知道如何在 R 中制定它。到目前为止我的代码是:

index = decisionMatrix[,1] == 1 & decisionMatrix[,9] == 1  
decisionMatrix[index,7] = .01  

将值 0.01 分配给满足该条件的行的第 7 列。我还想让所选行下方的行的第 7 列 = 0.1。

任何帮助将不胜感激!
谢谢
迈克

【问题讨论】:

    标签: r conditional-statements


    【解决方案1】:

    也许which

    index <- which(decisionMatrix[,1] == 1 & decisionMatrix[,9] == 1)
    ## Shift indices by 1
    index <- index+1
    ## Remove an index that would be greater than the number of rows
    index <- index[index<=nrow(decisionMatrix)]
    decisionMatrix[index,7] <- .01
    

    编辑:在SimonO101评论之后,如果你想修改匹配条件的行和下面的行,你只需要替换:

    index <- index+1
    

    作者:

    index <- c(index, index+1)
    

    【讨论】:

    • @SimonO101 Arf,由于稍后编辑,出现明显错误(重复index+1),抱歉。
    • 我认为这是对的,除了我认为index 必须是index &lt;- c( index , index + 1 ) 所以你得到所有的行下面的行...
    • 感谢代码!我稍微修改了一下,因为它似乎使两行都包含 0.01,而不仅仅是第二行。修改(尽管可能不优雅)如下:index &lt;- which(decisionMatrix[,1] == 1 &amp; decisionMatrix[,9] == 1) index &lt;- c(index, index+1) index = index[(length(index)/2+1):length(index)] index &lt;- index[index&lt;=nrow(decisionMatrix)] decisionMatrix[index,7] &lt;- .1 我添加了第三行以删除第一行,这样只有第二行会被修改。再次感谢
    • @SimonO101 抱歉,我看到代码没有分开。我想改变它,但我不知道怎么做。
    • @Mike 我认为您只需要在没有我的建议的情况下遵循 juba 的回答即可。
    【解决方案2】:

    R 中的子集使用逻辑向量。这意味着您可以将逻辑向量移动一个位置。示例:

    set.seed(42)
    DF <- data.frame(x=1:10, y=rnorm(10))
    #     x           y
    # 1   1  1.37095845
    # 2   2 -0.56469817
    # 3   3  0.36312841
    # 4   4  0.63286260
    # 5   5  0.40426832
    # 6   6 -0.10612452
    # 7   7  1.51152200
    # 8   8 -0.09465904
    # 9   9  2.01842371
    # 10 10 -0.06271410
    
    ind <- DF$y < 0
    #Shift by one position:
    ind <- c(FALSE, head(ind,-1))
    DF[ind,]
    #  x         y
    #3 3 0.3631284
    #7 7 1.5115220
    #9 9 2.0184237
    

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2020-06-19
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多