【问题标题】:R: Applying function to specific rows onlyR:仅将功能应用于特定行
【发布时间】:2013-10-14 20:08:57
【问题描述】:

我正在尝试仅将函数应用于满足我的条件的某些行。我从其他线程中看到我应该使用“应用”功能,但我似乎无法让它工作。
这是我到目前为止所拥有的:

a = which(decisionMatrix[,1]>0 & decisionMatrix[,4] < decisionMatrix[,5] &
          tail(ratios,1)>decisionMatrix[4])

这给了我符合我的条件的行数。

然后我使用:

apply(decisionMatrix[10],a,decisionMatrix[,1]/decisionMatrix[,5])

我在这里要做的是说“对于满足上述条件的每一行,取该行中的第一列并将其除以该行中的第五列并将结果存储在该行的第 10 列中行”

谁能给我一些建议?

【问题讨论】:

  • 您可以使用 a 从您的“decisionMatrix”对象 (DMsubset &lt;- decisionMatrix[a, ]) 中提取子集,然后将 apply 按行排列:apply(DMsubset, 1, ------)(其中 1 = 按行排列,并且 -- ---- = 你想做的任何计算)。

标签: r apply


【解决方案1】:

不要使用apply。要修改行就地,只需:

decisionMatrix[a, 10] <- decisionMatrix[a, 1] / decisionMatrix[a, 5]

【讨论】:

  • 感谢大家的解答!
【解决方案2】:

按照阿南达的评论,你想要这样的东西:

apply(decisionMatrix[a,], 1, function(x) x[1]/x[5])

但是,如果您希望输出与输入具有相同的尺寸(例如,如果您要将其添加回原始 decisionMatrix 对象),您可能希望将函数应用于每个行,然后对其输出进行子集化:

out <- apply(decisionMatrix, 1, function(x) x[1]/x[5])
out[-a] <- NA

正如@agstudy 指出的那样,后者可以通过做矢量化

out <- decisionMatrix[,1]/decisionMatrix[,5]

但您可能有一个更复杂的操作,该解决方案无法解决。如果它适用于您的操作,则矢量化解决方案更清洁、更快。

您可能还希望将其存储回您原来的decisionMatrix,这样做取决于您原来的decisionMatrix 的结构:

# If you want to replace an existing column 10:
decisionMatrix[,10] <- out

# If you want to column bind the result back to your original matrix:
decisionMatrix <- cbind(decisionMatrix, out)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2020-02-29
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2011-08-19
    • 2017-06-19
    相关资源
    最近更新 更多