Я только начинаю ценить мощь нового 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?