r语言 - 按天计算平均价格



我想这是一个非常简单的任务...... 我正在尝试计算每天的平均价格。这里有3个不同的日子,每个都有一些价格。 这是我最初拥有的数据帧

ID       Date      RoomAv    Price
1    2001-01-02    TRUE      110
2    2001-01-04    FALSE     120
3    2001-01-03    TRUE      130
4    2001-01-03    TRUE      140
5    2001-01-03    TRUE      150
6    2001-01-02    FALSE     160
7    2001-01-02    TRUE      170
8    2001-01-04    TRUE      180
9    2001-01-04    FALSE     190
10    2001-01-02    TRUE      200

我需要它是这样的东西

Date      AveragePrice
2001-01-02       num1
2001-01-03       num2
2001-01-04       num3

这就是我试图做的

df <- DataFrame %>%
group_by(DataFrame$Date) %>%
summarize(DataFrame$price == mean(DataFrame$Price))

我得到了:

Error: Column `DataFrame$price == mean(DataFrame$Price)` must be length 1 (a summary value), not 0

没有使用过 data.table 库,但想听听它是如何实现的。

一个带有data.table的选项

library(data.table)
setDT(df)[, .(Price = mean(Price), by = Date]

你可以做类似的事情

使用 dplyr

df <- DataFrame %>%
group_by(Date) %>%
mutate(price == mean(Price))

使用数据表。

df <- DataFrame[, mean(Price),.(Date)]

您可以使用基本 R 中的aggregate()来实现它:

dfout <- aggregate(Price ~Date, df, mean)

这样

> dfout
Date    Price
1 2001-01-02 160.0000
2 2001-01-03 140.0000
3 2001-01-04 163.3333

数据

df <- structure(list(ID = 1:10, 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(110L, 
120L, 130L, 140L, 150L, 160L, 170L, 180L, 190L, 200L)), class = "data.frame", row.names = c(NA, 
-10L))

请记住,在 R 中,==用于测试某个值是否等于另一个值,如x == 1。因此,您应该使用=汇总分配新变量。这是正确的版本。

library(dplyr)
DataFrame %>%
group_by(Date) %>%
summarize(avrgPrice = mean(Price))

谢谢, 实际上我发现这种方法最短:

dfMean <- aggregate(DataFrame$Price ~ DataFrame$Date, DataFrame, mean)

相关内容

  • 没有找到相关文章

最新更新