首页 > 解决方案 > 在其他数据框中重新计算值以进行计算

问题描述

我有一个看起来像这样的df:

df1 <- data.frame(country = c("C1","C1","C2","C2"),year = c(1998,2001,1998,2001), amount = c(11000,11500,5000,4100))

我在第一个 df 的基础上创建了另一个 df,如下所示:

df2 <- aggregate(amount ~ year, df1, sum)

我会创建一个新列df1$ratio,对应于每年每个 ID 的数量配给。它应该看起来像:

df3 <- data.frame(country = c("C1","C1","C2","C2"),year = c(1998,2001,1998,2001), amount = c(11000,11500,5000,4100), ratio = c(.6875, .7372,.3125,.2628))

任何的想法?

标签: r

解决方案


ave可以使用from来完成,而不是两步过程base R

df1$ratio <- with(df1, amount/ave(amount, year, FUN = sum))

mutatedplyr

library(dplyr)
df1 %>%
    group_by(year) %>%
    mutate(ratio = amount/sum(amount))

推荐阅读