R:仅将功能应用于特定行

时间:2013-10-14 10:41:16

标签: r apply

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

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

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

然后我使用:

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

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

有人能给我一些建议吗?

2 个答案:

答案 0 :(得分:4)

请勿使用apply。要修改就地行,只需执行以下操作:

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

答案 1 :(得分:3)

根据Ananda的评论,您需要以下内容:

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)