【发布时间】:2022-08-02 15:30:58
【问题描述】:
我正在使用 R 编程语言。我有以下格式的数据:
name = c(\"john\", \"john\", \"jack\", \"jack\", \"jason\", \"jason\")
time_to_run_100_meters_last_year_this_year = c(22.3, 22.1, 12.4, 12.3, 15.1, 15.6)
my_data = data.frame(name, time_to_run_100_meters_last_year_this_year)
name time_to_run_100_meters_last_year_this_year
1 john 22.3
2 john 22.1
3 jack 12.4
4 jack 12.3
5 jason 15.1
6 jason 15.6
我想了解每个学生的百分比随时间变化的情况。这意味着:(22.1/22.3、12.3/12.4、15.6/15.1)。
我想到了以下方法来解决这个问题:
library(dplyr)
my_data = my_data %>%
arrange(name) %>%
group_by(name) %>%
mutate(id = row_number()) %>%
ungroup()
id_1 = my_data[which(my_data$id == 1), ]
id_2 = my_data[which(my_data$id == 2), ]
division = id_2$time_to_run_100_meters_last_year_this_year/id_1$time_to_run_100_meters_last_year_this_year
unique = unique(my_data$name)
final_data = data.frame(unique, division)
最后,我认为我的想法奏效了:
> final_data
unique division
1 jack 0.9919355
2 jason 1.0331126
3 john 0.9910314
我的问题:但是有没有更好的方法来解决这个问题?
谢谢!
-
你能保证每组恰好有两个观察值吗?
标签: r dplyr data-manipulation