在R中使用ave()

时间:2014-05-10 22:01:32

标签: r for-loop count criteria

我想计算符合两个条件的匹配项,并将该值分配给一个单元格(单元格是正确的单词吗?)。到目前为止,我已尝试使用nrow()subset()来完成这项工作,如下所示:

for (n in nrow(data)) {data[n,17] <- nrow(subset(data,(REP == data$REP[n]) & (Was.Sent. == "Sent")))/nrow(subset(data,REP == data$REP[n]))}

到目前为止,每个单元格都填充为“NA”。我做错了什么,有更好/更简单的方法吗?

1 个答案:

答案 0 :(得分:3)

对于每一行,您都可以计算行中REP的平均已发送项目数。实际上可以使用ave()函数更好地完成。

这是一个示例数据集

data <- data.frame(
    Was.Sent=c("Sent","No")[c(1,1,2,1,2,1,2,1)],
    REP=c(1,2,3,1,2,3,1,2)
)

此处的代码将添加具有所需百分比的新列

data$psent<-with(data, ave(Was.Sent=="Sent", REP, FUN=mean))

如果我查看结果,我会看到

cbind(data,psent)[order(data$REP, data$Was.Sent),]
#  Was.Sent REP     psent
#7       No   1 0.6666667
#1     Sent   1 0.6666667
#4     Sent   1 0.6666667
#5       No   2 0.6666667
#2     Sent   2 0.6666667
#8     Sent   2 0.6666667
#3       No   3 0.5000000
#6     Sent   3 0.5000000