我有一个数据帧,在8周的时间内为一组运动员提供垂直跳跃力.一名运动员只完成了七周.我想计算一个名为"percent.change"的新变量,它计算整个研究期间每周的第一周的百分比差异.我一直在尝试使用dplyr解决这个问题但是我被卡住了.我想知道是否有人有一个简单的解决方案.
数据框称为weeklyPower.每周一次的PowerPower样本如下:
athlt week power
E 1 25.20015
E 2 25.54569
E 3 24.52463
E 4 24.88044
E 5 25.11421
E 6 25.86154
E 7 26.08613
E 8 25.90775
K 1 29.74277
K 2 28.80131
K 3 28.96818
K 4 29.62439
K 5 29.98119
K 6 29.11570
K 7 29.96380
T 1 25.02413
T 2 23.75867
T 3 25.25716
T 4 24.73285
T 5 27.02891
T 6 25.60140
T 7 25.64665
T 8 24.38937
Run Code Online (Sandbox Code Playgroud)
非常感谢您的任何想法.
马特
使用dplyr你可以做:
df %>%
group_by(athlt) %>%
arrange(week) %>%
mutate(cp = power / first(power) * 100)
Run Code Online (Sandbox Code Playgroud)
这使:
#Source: local data frame [23 x 4]
#Groups: athlt
# athlt week power cp
#1 E 1 25.20015 100.00000
#2 E 2 25.54569 101.37118
#3 E 3 24.52463 97.31938
#4 E 4 24.88044 98.73132
#5 E 5 25.11421 99.65897
#6 E 6 25.86154 102.62455
#7 E 7 26.08613 103.51577
#8 E 8 25.90775 102.80792
#9 K 1 29.74277 100.00000
#10 K 2 28.80131 96.83466
Run Code Online (Sandbox Code Playgroud)
或另一种选择:
df %>%
group_by(athlt) %>%
mutate(cp = power / power[which.min(week)] * 100)
Run Code Online (Sandbox Code Playgroud)