我需要在数据框中创建第三列(称为teste),其中包含所代表的车辆模型的平均值,这样在车行上它将计算所有车型的平均值和类似的自行车计算和卡车。
model price
car 10
car 11
car 12
car 13
car 14
bike 5
bike 6
bike 7
bike 8
bike 9
truck 12
truck 13
truck 14
truck 15
truck 16
我能够创建一个for循环,可以使用以下R代码打印所需的结果:
for(x in teste$model){
print(mean(teste[teste$model==x, ]$price))
}
但是,在尝试创建第三列或向量时,下面的代码给出了一个错误,指出替换行大于数据。
teste$media <- rep(NA, 15)
for(x in teste$model){
teste$media[x] <- mean(teste[teste$model==x, ]$price)
}
我不知道为什么替换矢量更大。任何人都可以帮我识别错误或提出另一种方法来实现目标。
提前谢谢大家
亚历
答案 0 :(得分:2)
使用ave
作为默认函数使用mean
。见?ave
.
> teste$media <- ave(teste$price, teste$model)
> teste
model price media
1 car 10 12
2 car 11 12
3 car 12 12
4 car 13 12
5 car 14 12
6 bike 5 7
7 bike 6 7
8 bike 7 7
9 bike 8 7
10 bike 9 7
11 truck 12 14
12 truck 13 14
13 truck 14 14
14 truck 15 14
15 truck 16 14
答案 1 :(得分:1)
使用dplyr
:
library(dplyr)
teste %>% group_by(model) %>%
mutate(media=mean(price))
或data.table
:
library(data.table)
setDT(teste)[ , media:=mean(price), by=model]