r - 将行值除以 R data.frame 中的聚合总和

标签 r

我有以下数据框

dat <- data.frame(x=c(1,2,3,3,2,1), y=c(3,4,4,5,2,5))

现在我想得到第三列,将 y 行值除以聚合的 y 值(基于 x 列中的唯一值)。所以,然后我得到第 1 行如下: 1,3,0.375; 0.375 已计算为 3/(5+3)。

我对 R 比较陌生,希望你能帮助我。谢谢!

最佳答案

解决这个问题的方法有很多种,这里有一个

with(dat, ave(y, x, FUN = function(x) x/sum(x)))
## [1] 0.3750000 0.6666667 0.4444444 0.5555556 0.3333333 0.6250000

这是另一种可能
library(data.table)
setDT(dat)[, z := y/sum(y), by = x]
dat
#    x y         z
# 1: 1 3 0.3750000
# 2: 2 4 0.6666667
# 3: 3 4 0.4444444
# 4: 3 5 0.5555556
# 5: 2 2 0.3333333
# 6: 1 5 0.6250000

这是第三个
library(dplyr)
dat %>%
  group_by(x) %>%
  mutate(z = y/sum(y))

# Source: local data frame [6 x 3]
# Groups: x
# 
#   x y         z
# 1 1 3 0.3750000
# 2 2 4 0.6666667
# 3 3 4 0.4444444
# 4 3 5 0.5555556
# 5 2 2 0.3333333
# 6 1 5 0.6250000

关于r - 将行值除以 R data.frame 中的聚合总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239229/

相关文章:

r - ggplot 2 : generate one separate box plot per column

r - mutate_at 将 NA 替换为 0

python - 在 R 中,即使安装了 Boto3,也没有 Boto3 连接 Athena 时出错

R - 确定变量是否是字符串

r - tidyr::unite 的数据表版本

r - 是否有 R 函数可以帮助我修改巴黎图中散点图点的大小?

r - 如何使用 R 中的 strptime 处理日期中不需要的字符

r - purrr::map_int:无法将元素 1 从 double 强制转换为整数

r - 通过根据每个 ID 的行数扩展列来展平行

r - R中Twitter情感分析中的图释