r - R中如何用一个因子来运算两个变量

标签 r group-by r-factor

我试图这样做:(以下数据框只是为了展示这个想法)

      a     b     c

[1,]  1     1     2

[2,]  1     3     5

[3,]  2     2     4

[4,]  2     1     5

其中“a”是将“b”和“c”分为两类的因子。我想得到 a 的加权平均值(b 作为权重,或者实际上,b/Sum(b) 作为权重)。我找不到一个函数可以使用相同的因子操作多个变量。

在这个例子中,我想得到两种方法:

a组=1:(1*2+3*5)/(2+5)=17/7

a=2组:(2*4+1*5)/(4+5)=13/9

我是 R 新手,所以这对我来说真的很难处理。希望大家能抽出几秒钟的时间发表评论。非常感谢!

最佳答案

我们可以将矩阵(基于所示的结构)转换为data.frame,按“a”分组,总结通过'b'、'c' 的乘积的总和除以'c'的总和

library(dplyr)
m1 %>%
   as.data.frame %>% # if it is a matrix
   group_by(a) %>%
   summarise(new = sum(b*c)/sum(c))
# A tibble: 2 x 2
#       a   new
#   <int> <dbl>
#1     1  2.43
#2     2  1.44

数据

m1 <- structure(c(1L, 1L, 2L, 2L, 1L, 3L, 2L, 1L, 2L, 5L, 4L, 5L), .Dim = c(4L, 
3L), .Dimnames = list(NULL, c("a", "b", "c")))

关于r - R中如何用一个因子来运算两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257618/

相关文章:

基于具有相同标签和多个值的两个向量(级别和标签)重新编码值以替换

r - ggplot2 条形图,条内有线条

r - 计算R中函数生成的数据的相关性

r - 在ggplot中使用 `facet_wrap`时如何修复x和y轴

mysql - 不同行的 SUM

r - 搜索整个列表并根据模式重命名所有内容

mysql 查询以获取不同phone_numbers 的最新N 行的平均值

MySQL 选择每个运动员的最佳(和最老)表现、类别

r - 使用 qplot 仅绘制数据的一个子集