r - R中 SumIfs() 的向量

标签 r excel aggregate user-defined-functions sumifs

我希望通过为每个观察创建一个条件平均值的均值向量来模仿 R 中 Excel 的 SumIfs() 函数。我见过很多使用 aggregate() 的例子或 setDT()总结基于固定数量的数据框。但是,我想根据数据框中每一行的变量输入创建这些摘要的向量。

这是我的数据示例:

> a <- c('c', 'a', 'b', 'a', 'c', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'b', 'a')
> b <- c(6, 1, 1, 2, 1, 2, 2, 4, 3, 3, 5, 5, 4, 6, 6)
> c <- c(69.9, 21.2, 37, 25, 65.9, 33.1, 67, 28.4, 36, 67, 22, 37.9, 62.3, 30, 25)
> df <- data.frame(cbind(a, b, c))
> df$b <- as.numeric(as.character(df$b))
> df$c <- as.numeric(as.character(df$c))
> df
   a b    c
1  c 6 69.9
2  a 1 21.2
3  b 1 37.0
4  a 2 25.0
5  c 1 65.9
6  b 2 33.1
7  c 2 67.0
8  a 4 28.4
9  b 3 36.0
10 c 3 67.0
11 a 5 22.0
12 b 5 37.9
13 c 4 62.3
14 b 6 30.0
15 a 6 25.0

我想添加第四列,df$d , 取平均值 df$c对于那些 df$a == x & y - 2 <= df$b < y 的观察结果在哪里 xydf$adf$b ,分别用于正在计算的观测值。

手动操作,df$d好像:
> df$d <- c(62.3, NA, NA, 21.2, NA, 37, 65.9, 25, 35.05, 66.45, 28.4, 36, 67, 37.9, 25.2)
> df
   a b    c     d
1  c 6 69.9 62.30
2  a 1 21.2    NA
3  b 1 37.0    NA
4  a 2 25.0 21.20
5  c 1 65.9    NA
6  b 2 33.1 37.00
7  c 2 67.0 65.90
8  a 4 28.4 25.00
9  b 3 36.0 35.05
10 c 3 67.0 66.45
11 a 5 22.0 28.40
12 b 5 37.9 36.00
13 c 4 62.3 67.00
14 b 6 30.0 37.90
15 a 6 25.0 25.20

有没有我可以用来自动执行此操作的功能?谢谢你的帮助!

最佳答案

这可以使用 SQL 中的左自连接以直接的方式完成。这将连接到 u 的每一行df 的实例v 的那些行df 的实例满足 on条件,然后在其 c 上取平均值值(value)观。

library(sqldf)

sqldf("select u.*, avg(v.c) as d
       from df u left join df v
       on u.a = v.a and v.b between u.b-2 and u.b-1
       group by u.rowid")

给予:
   a b    c     d
1  c 6 69.9 62.30
2  a 1 21.2    NA
3  b 1 37.0    NA
4  a 2 25.0 21.20
5  c 1 65.9    NA
6  b 2 33.1 37.00
7  c 2 67.0 65.90
8  a 4 28.4 25.00
9  b 3 36.0 35.05
10 c 3 67.0 66.45
11 a 5 22.0 28.40
12 b 5 37.9 36.00
13 c 4 62.3 67.00
14 b 6 30.0 37.90
15 a 6 25.0 25.20

关于r - R中 SumIfs() 的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49180367/

相关文章:

excel - Excel 中的嵌套 IF 语句 [超过 7 个允许限制]

使用 data.frames 将 Excel 工作簿中的所有工作表读入 R 列表

r - 如果 R 中另一列中的值是连续的,则追加列的值

mysql - MariaDB/MySQL TO_SECONDS 和 AGGREGATE 函数

r - 对于 R 数据框中的每一行

基于R中条件的滚动平均值

r - 如何正确使用 aes 为 ggplot2 中的绘图编写函数?

excel - Excel Add ins 中的 Workbook_Open 事件仅适用于第一个文件打开

MongoDB 查找一个部门的最高工资

r - 直接从URL加载PNG文件