繁体   English   中英

R - 将相同的代码应用于多列

[英]R - Applying the Same Code to Multiple Columns

在我的数据清理中,我有多个维度列,其中包含需要由多个指标列聚合的名称。 相同的代码需要应用于我的维度列。 我可以很容易地复制和粘贴相同的代码块十次并更改列引用,但是肯定有一个更简单的解决方案。

我的研究让我相信我在 sapply() function 中遗漏了一些我无法理解的明显东西。

非常基本的代表:

library(tidyverse)

player_1 <- c("Smith", "Adams", "Washington")
player_2 <- c("Johnson", "Jefferson", "Fuller")
player_3 <- c("Forman", "Hyde", "Kelso")
metric_1 <- 1:3
metric_2 <- 2:4
metric_3 <- 3:5

df <- data.frame(player_1, player_2, player_3, metric_1, metric_2, metric_3)

p1 <- df %>% 
  group_by(player_1) %>% 
  summarize_at(c("metric_1", "metric_2", "metric_3"), sum)

有没有办法只需要键入这个“p1”代码一次,但让 R 循环通过我的列 player_1、player_2 和 player_3?

如果我能提供更详细的信息,请告诉我。

几个选项:

  1. 使用map并分别迭代每个播放器。
library(tidyverse)

cols <- paste0('player_', 1:3)

map(cols, ~df %>% 
           group_by(.data[[.x]]) %>% 
            summarise(across(starts_with('metric'), sum)))

#[[1]]
# A tibble: 3 x 4
#  player_1   metric_1 metric_2 metric_3
#* <chr>         <int>    <int>    <int>
#1 Adams             2        3        4
#2 Smith             1        2        3
#3 Washington        3        4        5

#[[2]]
# A tibble: 3 x 4
#  player_2  metric_1 metric_2 metric_3
#* <chr>        <int>    <int>    <int>
#1 Fuller           3        4        5
#2 Jefferson        2        3        4
#3 Johnson          1        2        3

#[[3]]
# A tibble: 3 x 4
#  player_3 metric_1 metric_2 metric_3
#* <chr>       <int>    <int>    <int>
#1 Forman          1        2        3
#2 Hyde            2        3        4
#3 Kelso           3        4        5

  1. 获取长格式数据。
df %>%
  pivot_longer(cols = starts_with('player')) %>%
  group_by(name, value) %>%
  summarise(across(starts_with('metric'), sum))

#  name     value      metric_1 metric_2 metric_3
#  <chr>    <chr>         <int>    <int>    <int>
#1 player_1 Adams             2        3        4
#2 player_1 Smith             1        2        3
#3 player_1 Washington        3        4        5
#4 player_2 Fuller            3        4        5
#5 player_2 Jefferson         2        3        4
#6 player_2 Johnson           1        2        3
#7 player_3 Forman            1        2        3
#8 player_3 Hyde              2        3        4
#9 player_3 Kelso             3        4        5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM