используйте pmap () для вычисления средних значений нескольких столбцов - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь лучше понять, как pmap() работает в рамках фреймов данных, и я получаю удивительный результат при применении pmap() для вычисления средних значений из нескольких столбцов.

mtcars %>% 
  mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>% 
  select(comp_var, vs, am, cyl)

В приведенном выше примере comp_var равно значению vs в его строке, а не среднему значению трех переменных в данной строке.

Я знаю, что могу получить точные результаты для comp_var, используя ...

mtcars %>% 
  rowwise() %>% 
    mutate(comp_var = mean(c(vs, am, cyl))) %>% 
    select(comp_var, vs, am, cyl) %>% 
  ungroup()

... но я хочу понять, как pmap() должен применяться в таком случае, как этот.

1 Ответ

0 голосов
/ 08 мая 2018

Нам нужно объединить аргумент для параметра x в mean как

x: объект R.В настоящее время существуют методы для числовых / логических векторов и объектов даты, даты и времени.Комплексные векторы разрешены только для «trim = 0».

Таким образом, если мы передадим аргумент, такой как x1, x2, x3 и т. Д., Он перейдет в параметр ... на основеиспользование

означает (х, ...)

Например,

mean(5, 8) # x is 5
#[1] 5 
mean(8, 5) # x is 8
#[1] 8
mean(c(5, 8)) # x is a vector with 2 values
#[1] 6.5

В функции rowwise OP объединяет элементык одному вектору, в то время как с pmap он оставляется как таковой для mean для применения к первому аргументу

out1 <- mtcars %>% 
         mutate(comp_var = pmap_dbl(list(vs, am, cyl), ~mean(c(...)))) %>% 
         dplyr::select(comp_var, vs, am, cyl)

-проверка с выводом rowwise

out2 <- mtcars %>% 
         rowwise() %>% 
         mutate(comp_var = mean(c(vs, am, cyl))) %>% 
         dplyr::select(comp_var, vs, am, cyl) %>% 
         ungroup()

all.equal(out1, out2, check.attributes = FALSE)
#[1] TRUE
...