使用R

时间:2016-09-06 16:39:05

标签: r for-loop

我需要在数据框中创建第三列(称为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)
}

我不知道为什么替换矢量更大。任何人都可以帮我识别错误或提出另一种方法来实现目标。

提前谢谢大家

亚历

2 个答案:

答案 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]