假设我有以下数据框:
我希望能够按科目将成绩和学习时间除以它们在每个科目中的第一条记录。我进行如下操作:
我会得到以下输出。
当我知道变量名时,这个任务相对容易。但是,我正在尝试编写一个通用函数,该函数能够作用于任何数据框/数据表/ Tibble,其中我可能不知道需要改变的变量名,我只知道不需要改变的变量名。我正在尝试使用tidyverse/data.table完成此操作,但是我无法让任何内容正常工作。
非常感谢您的帮助。
year subject grade study_time
1 1 a 30 20
2 2 a 60 60
3 1 b 30 10
4 2 b 90 100
我希望能够按科目将成绩和学习时间除以它们在每个科目中的第一条记录。我进行如下操作:
df %>%
group_by(subject) %>%
mutate(RN = row_number()) %>%
mutate(study_time = study_time/study_time[RN ==1],
grade = grade/grade[RN==1]) %>%
select(-RN)
我会得到以下输出。
year subject grade study_time
1 1 a 1 1
2 2 a 2 3
3 1 b 1 1
4 2 b 3 10
当我知道变量名时,这个任务相对容易。但是,我正在尝试编写一个通用函数,该函数能够作用于任何数据框/数据表/ Tibble,其中我可能不知道需要改变的变量名,我只知道不需要改变的变量名。我正在尝试使用tidyverse/data.table完成此操作,但是我无法让任何内容正常工作。
非常感谢您的帮助。
mutate_at
函数的更多背景信息以及它与普通mutate
的区别可能会对未来的观众有所帮助。 - IRTFMsetDT(df)[, (3:4) := lapply(.SD, function(x) x/x[1]), subject, .SDcols = 3:4]
。 - akrun