我是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]]
}
非常感谢任何帮助或指示 提前谢谢大家。
答案 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
希望这有帮助!