组的行块在R中的数据帧中的每个块应用不同的减法(不是函数)

时间:2017-12-30 13:59:29

标签: r dataframe dplyr

我是R的新手,但我想知道是否有办法应用特定的计算(不是函数)来分隔数据框中的行块。在我的例子中,我有以下数据框架,称为races(下图),我想添加一个名为diff_towinner的变量,其中我采用赛车的速度并从胜利者速度中减去它。在我的简单代码(下面)中,我能够添加一列,但速度差的计算不会分解为种族(行块),而是对于种族B和C,它会考虑获胜者的速度所有行的种族A.

race position speed 
A      1        340     
A      2        320   
A      3        316   
B      1        350   
B      2        345   
B      3        332   
C      1        325   
C      2        320  
C      3        311   

我的简单代码:

top_speed <- races %>% 
  group_by(race) %>% 
  summarise(winner_speed = max(speed))

race <- merge(race, top_speed, by="race")

for (i in 1:nrow(races)){
    races$diff_towinner[[i]] = races$winner_speed[[i]] - races$speed[[i]]
  }

非常感谢任何帮助或指示 提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

您不需要额外的步骤,您可以使用mutate一次创建额外的列:

library(dplyr)

races = read.table(text="race position speed 
A 1 340 
A 2 320 
A 3 316 
B 1 350 
B 2 345 
B 3 332 
C 1 325 
C 2 320 
C 3 311",header=T)


top_speed <- races %>% 
group_by(race) %>% 
  mutate(diff_to_winner = max(speed)-speed) %>%
  as.data.frame()

输出:

  race position speed diff_to_winner
1    A        1   340              0
2    A        2   320             20
3    A        3   316             24
4    B        1   350              0
5    B        2   345              5
6    B        3   332             18
7    C        1   325              0
8    C        2   320              5
9    C        3   311             14

希望这有帮助!