小编G. *_*her的帖子

如何按照名称模式改变多列?

我有一个包含遵循名称模式的多列的数据集,并且我需要计算作为其他两列的乘积的新列。我正在寻找一个 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)

r dplyr

5
推荐指数
1
解决办法
742
查看次数

标签 统计

dplyr ×1

r ×1