由于您提到您使用subset 和dcast 来构建每个数据框,我怀疑您已经将这些数据全部放在一个数据框中,在这种情况下分配numerator 和denominator 的角色可能是为了使用ddply 运行计算,您需要做的所有事情。例如,使用您的示例数据并将其融合回一个长格式的数据框,将通过单个 ddply 为您提供以下内容:
# data
DF1 <- data.frame(Name = c("Aaron", "Blake"), Jan = c(2, 5), Feb = c(4, 6), Mar = c(3, 4))
DF2 <- data.frame(Name = c("Aaron", "Blake"), Jan = c(4, 7), Feb = c(6, 6), Mar = c(6, 5))
# long format with 'numerator' and 'denominator' roles assigned
# (unnecessary if you already have long format, just assign numerator/denomninator)
library(reshape2)
df <- rbind(
transform(
melt(DF1, id.vars = "Name", variable.name = "Month"),
role = "numerator"),
transform(
melt(DF2, id.vars = "Name", variable.name = "Month"),
role = "denominator")
)
# ddply
library(plyr)
ddply(df, .(Name, Month), summarize,
Result = value[role == "numerator"] / value[role == "denominator"])
# Name Month Result
# 1 Aaron Jan 0.5000000
# 2 Aaron Feb 0.6666667
# 3 Aaron Mar 0.5000000
# 4 Blake Jan 0.7142857
# 5 Blake Feb 1.0000000
# 6 Blake Mar 0.8000000