You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按日期计算平均价格:dplyr报错及data.table实现咨询

嘿,我来帮你搞定这个按日期计算平均价格的需求!先帮你理清之前代码出错的原因,再给你用data.table实现的完整方案~

先说说你原代码的问题(dplyr部分)

你之前的dplyr代码有几个明显的错误:

  1. group_by(DataFrame$Date):在dplyr的管道语法里,不需要加数据框前缀,直接写group_by(Date)就行,管道已经把数据传递过来了。
  2. summarize(DataFrame$price == mean(DataFrame$Price)):这部分完全写错了——你这里是在做一个逻辑判断(判断DataFrame$price是否等于平均值),而且列名还写错了(原数据是大写的Price,你写成了小写price),最后还没给结果列命名,所以才会报“长度不为1”的错误。
    正确的dplyr写法应该是:
library(dplyr)
DataFrame %>% 
  group_by(Date) %>% 
  summarize(AveragePrice = mean(Price, na.rm = TRUE))

重点:用data.table实现你的需求

接下来是你想要的data.table方案,步骤很清晰:

1. 先准备测试数据(和你给出的一致)

如果还没创建数据框,可以用这段代码生成:

DataFrame <- data.frame(
  ID = 1:10,
  Date = as.Date(c("2001-01-02", "2001-01-04", "2001-01-03", "2001-01-03", "2001-01-03",
                   "2001-01-02", "2001-01-02", "2001-01-04", "2001-01-04", "2001-01-02")),
  RoomAv = c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE),
  Price = c(110, 120, 130, 140, 150, 160, 170, 180, 190, 200)
)

2. 加载data.table并转换数据格式

data.table需要先把普通的data.frame转换成它的专属格式,用setDT()函数就行:

library(data.table)
setDT(DataFrame)

3. 按日期分组计算平均价格

用data.table的语法一行就能搞定:

result <- DataFrame[, .(AveragePrice = mean(Price, na.rm = TRUE)), by = Date]

4. 查看结果

运行后你会得到完全符合你需求的输出:

Date AveragePrice
1: 2001-01-02        160.0
2: 2001-01-04        163.3333
3: 2001-01-03        140.0

解释一下data.table的语法

  • by = Date:指定按照Date列进行分组
  • .(AveragePrice = mean(Price, na.rm = TRUE)):创建一个名为AveragePrice的新列,值是每组Price的平均值;na.rm = TRUE是为了处理可能存在的缺失值,避免结果出现NA
  • 整个语句的逻辑是:对DataFrame按Date分组,每组计算Price的平均值,最终保留Date和计算出的AveragePrice列

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:08:12