Как изменить новый столбец с помощью строки для выбора столбцов в grouped_tbl, используя dplyr r? - PullRequest
1 голос
/ 28 февраля 2020

У меня есть сгруппированный фрейм данных из моего большого набора данных с ~ 800 столбцами и ~ 2,5 миллионами записей. Я пытаюсь создать столбцы средних строк только для 5-10 столбцов каждый, но, не знаю почему, я продолжаю получать NA как средство для всех строк.

Вот что я попробовал:

clean_bmk <- clean_bmk %>% 
                rowwise() %>%
                mutate(
                       BMK_Mean_Strategic = mean(!!strategic, na.rm = T),
                       BMK_Mean_DiffChange = mean(!!diffchange, na.rm = T),
                       BMK_Mean_Failure = mean(!!failure, na.rm = T),
                       BMK_Mean_Narrow = mean(!!narrow, na.rm = T),
                       BMK_R1_Performance = mean(!!performance_vars, na.rm=T),
                       BMK_R2_Promotion = mean(!!promote_vars, na.rm=T),
                       BMK_R3_Derail = mean(!!derail_vars, na.rm=T))


class(clean_bmk)
[1] "grouped_df" "tbl_df"     "tbl"        "data.frame"

Когда я делаю это, все мутированные столбцы имеют значение NA. Но работает следующее:

clean_bmk$Strategic_Mean <- rowMeans(clean_bmk[,strategic], na.rm=T)

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

например:

strategic <- c("column1", "column15", "column27")

и аналогично другим переменным, таким как diffchange, failure, et c.

Я пытался сделать dput(clean_bmk), чтобы поделиться данными с вами, но так как набор данных большой, я не смог его получить. Я предполагаю, потому что это grouped_df, я не мог использовать [[ или sample() набор данных.

1 Ответ

1 голос
/ 28 февраля 2020

Было бы неэффективно использовать rowwise, вместо этого лучший вариант - rowMeans после select с интересующими колонками

library(dplyr)
clean_bmk %>% 
    ungroup %>%
    mutate(
      BMK_Mean_Strategic = rowMeans(select(., strategic),  na.rm = TRUE),
       BMK_Mean_DiffChange = rowMeans(select(., diffchange), na.rm = TRUE),
       BMK_Mean_Failure = rowMeans(select(., failure), na.rm = TRUE),
       BMK_Mean_Narrow = rowMeans(select(., narrow), na.rm = TRUE),
       BMK_R1_Performance = rowMeans(select(., performance_vars), na.rm=TRUE),
       BMK_R2_Promotion = rowMeans(select(., promote_vars), na.rm=TRUE),
       BMK_R3_Derail = rowMeans(select(., derail_vars), na.rm=TRUE))

Использование воспроизводимого примера

data(mtcars)
#v1 <- c('mpg', 'disp')
mtcars %>%
   transmute(newMean = rowMeans(select(., v1), na.rm = TRUE)) %>%
   head  
#                  newMean
#Mazda RX4           90.50
#Mazda RX4 Wag       90.50
#Datsun 710          65.40
#Hornet 4 Drive     139.70
#Hornet Sportabout  189.35
#Valiant            121.55
...