在 R 中划分两个数据帧(一个到另一个)

Dividing Two Data Frames (One into the Other) in R

如何将一个数据框除以另一个?这两个数据框具有相同的列和相同的行,但我需要将每个相交与其对应的相交划分为一个新的数据框,例如以下:

DF1
Name    Jan    Feb    Mar
Aaron     2      4      3
Blake     5      6      4

DF2
Name    Jan    Feb    Mar
Aaron     4      6      6
Blake     7      6      5

DF1/DF2 = DF3

DF3 (result)
Name    Jan    Feb    Mar
Aaron   0.5    0.7    0.5
Blake   0.7    1.0    0.8

我使用 subset 然后 dcast 来构建每个数据框,但很难弄清楚如何划分它们。感谢您的帮助!

我们将 'DF1' 和 'DF2' 中的数字列(通过删除第一列)和 cbind 与第一列分开。

DF3 <- cbind(DF1[1],round(DF1[-1]/DF2[-1],1))
DF3
#    Name Jan Feb Mar
# 1 Aaron 0.5 0.7 0.5
# 2 Blake 0.7 1.0 0.8

既然你提到你使用 subsetdcast 来构建每个数据框,我怀疑你已经将这些数据全部放在一个数据框中,在这种情况下分配角色 numeratordenominator 可能是您需要做的所有事情,以便 运行 使用 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