我有一个包含遵循名称模式的多列的数据集,并且我需要计算作为其他两列的乘积的新列。我正在寻找一个 tidyverse 选项,但我想避免做一个ivot_longer,因为数据集有>百万行。
示例数据集
library(dplyr)
df <- tibble(
jan_mean = runif(10),
feb_mean = runif(10),
mar_mean = runif(10),
jan_sd = runif(10),
feb_sd = runif(10),
mar_sd = runif(10),
)
Run Code Online (Sandbox Code Playgroud)
我可以像这样手动完成:
df2 <- df %>%
mutate(jan_cv= jan_mean/jan_sd,
feb_cv= feb_mean/feb_sd,
mar_cv= mar_mean/mar_sd
)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,但我对月值有类似的操作。
编辑1
我需要对大型数据集执行此操作,并且担心这pivot_longer会非常耗时,因此我对这三种方法进行了快速比较。
方法 1是手动方式,方法 2是 @Tarjae 建议的简短版本,方法 3使用更长的数据透视:
tic("Method 1: manual option")
df2 <- df %>%
mutate(jan_cv= jan_mean/jan_sd,
feb_cv= feb_mean/feb_sd,
mar_cv= mar_mean/mar_sd
)
toc()
tic("Method 2: Short option")
df2 <- df %>%
mutate(across(ends_with('_mean'), …Run Code Online (Sandbox Code Playgroud)