基于其他列

时间:2017-02-06 20:46:34

标签: r

使用数据集' cars'在R中,我想在此数据集中添加一个新列,该列采用列的平均值' dist'取决于列'速度'中的值,同时还有R评估'速度'作为分组参数。

首先,我需要19组反映汽车速度的独特速度:

4  7  8  9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25

对于这19个组中的每一组,我想知道平均dist是什么,但只有当这19个类别中的每个类别中的至少一个条目符合标准时(例如,至少一个dist-value高于20)。

对于汽车数据集,对于速度为4到12的汽车我会得到类似的东西:

speed   dist    avr_dist_if_one_speed_is_above20
4   2   none
4   10  none
7   4   13
7   22  13
8   16  none
9   10  none
10  18  26
10  26  26
10  34  26
11  17  22.5
11  28  22.5
12  14  21.5
12  20  21.5
12  24  21.5
12  28  21.5
...

由于速度为4的2辆车都有低于20的dist,我没有得到这两个参赛作品的平均值。对于速度为7的汽车,我的平均速度为13,因为至少有一辆速度为7的汽车的速度超过20。

对于速度为8和9的赛车,我没有得到平均值,因为这两款赛车都有20以下的速度。速度为10的赛车应平均返回26

因为速度为10的两辆车的间距大于20。

对于速度为11的汽车,我得到22.5

对于速度为12的汽车,我得到21.5。

R代码应该计算所有剩余速度类别的平均dist,因为其余的都包括dist> 20的汽车。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这将做你想要的。

library(dplyr)

cars %>%
        group_by(speed) %>%
        summarise(n = n(),
                  avg_dist = ifelse(any(dist > 20),mean(dist, na.rm = T), NA)

答案 1 :(得分:0)

试试这个:

 library(dplyr)

 cars %>% 
       group_by(speed, dist) %>% 
       group_by(speed) %>% 
       mutate(avr_dist_if_one_speed_is_above20 = mean(dist[max(dist)>20]))