Шаг в сторону for-loop с использованием dplyr 1.0.0 - PullRequest
0 голосов
/ 03 августа 2020

Я только начинаю ценить мощь нового dplyr 1.0.0. Но после прочтения виньеток мне нужно прочитать еще что-то, и, конечно же, их больше нет, поэтому я снова обращаюсь к SO.

Скажем, у меня есть следующий набор данных # с использованием rowwise и c_across для вычисления новых переменных rm (list = ls ())

library(tidyverse)
set.seed(1)
df <- tibble(d_1_a = round(sample(1:10,10,replace=T)),
             d_1_b = round(sample(1:10,10,replace=T)),
             d_1_c = round(sample(1:10,10,replace=T)),
             d_1_d = round(sample(1:10,10,replace=T)),
             d_2_a = round(sample(1:10,10,replace=T)),
             d_2_b = round(sample(1:10,10,replace=T)),
             d_2_c = round(sample(1:10,10,replace=T)),
             d_2_d = round(sample(1:10,10,replace=T)))

И я хочу вычислить суммы строк для подмножества столбцов в наборе данных и добавить их в существующий набор данных. Я придумал следующий for-l oop

for (i in 1:2) {
  namesCols <- grep(paste0("^d_",i,"_[a-z]$"), names(df), perl = T) # indexes of subset of columns
  newDF <- df %>% select(all_of(namesCols)) # extract subset of columns from main
  totDF <- newDF %>% rowwise() %>% 
                     mutate(!!paste0("sum_",i) := sum(c_across(everything()))) %>% # new column from old 
                     select(starts_with("sum")) # now extract just the new column as a dataframe
  df <- cbind(df,totDF) # binds the new column to the old dataframe
}

Теперь, если мы назовем исходный набор данных df

d_1_a d_1_b d_1_c d_1_d d_2_a d_2_b d_2_c d_2_d sum_1 sum_2
1      9     5     5    10     9     2     6     7    29    24
2      4    10     5     6     7     2     8     6    25    23
3      7     6     2     4     8     6     7     1    19    22
4      1    10    10     4     6     6     1     5    25    18
5      2     7     9    10    10     1     4     6    28    21
6      7     9     1     9     7     3     8     1    26    19
7      2     5     4     7     3     3     9     9    18    24
8      3     5     3     6    10     8     9     7    17    34
9      1     9     6     9     6     6     7     7    25    26
10     5     9    10     8     8     7     4     3    32    22

, мы можем увидеть два столбца суммы, каждый из которых рассчитывается из другое подмножество существующих столбцов из исходного набора данных, а затем добавлено в конце этого набора данных.

Но я очень хочу изучить некоторые из новых dplyr / purrr вуду, но я не знаю, как синтаксис работает.

Может ли кто-нибудь предложить tidyverse версию моего for-l oop?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...