我想这是一个非常简单的任务...... 我正在尝试计算每天的平均价格。这里有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)