произведение нескольких выбранных столбцов в фрейме данных в R

#r #dplyr

#r #dplyr

Вопрос:

У меня есть фрейм данных с подмножеством переменных, которое начинается с ‘AA_’ (например, AA_1, AA_2, … AA_100) вместе с другими переменными X, Y, Z.

Если я хотел бы получить результат всех переменных ‘AA_’, какой был бы наиболее эффективный способ в R для достижения этого?

Я думаю что-то вроде

 mydata = mydata %>% 
  mutate(AA_product = reduce(starts_with('AA_'), `*`))
  

но это не совсем работает

Ответ №1:

Здесь нам нужно выбрать данные

 library(dplyr)
library(purrr)
mydata %>% 
        mutate(AA_product = reduce(select(., starts_with( 'AA_')), `*`))
  

-вывод

 #   X Y Z AA_1 AA_2 AA_3 AA_product
#1 1 2 3    1    2    3          6
#2 2 3 4    2    3    4         24
#3 3 4 5    3    4    5         60
  

Другой менее эффективный подход заключается rowwise в c_across

 mydata %>%
    rowwise() %>%
    mutate(AA_prod = prod(c_across(starts_with('AA')))) %>%
    ungroup
  

данные

 mydata <- data.frame(X = 1:3, Y = 2:4, Z = 3:5,
           AA_1 = 1:3, AA_2 = 2:4, AA_3 = 3:5)
  

Ответ №2:

Если вам нужно произведение "AA_" столбцов по строкам, вы можете сделать это в base R с помощью Reduce :

 cols <- grep('AA_', names(mydata))
mydata$AA_product <- Reduce(`*`, mydata[cols])
  

и apply :

 mydata$AA_product <- apply(mydata[cols], 1, prod)