#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)