Произведите строчные операции над вектором столбцов - PullRequest
0 голосов
/ 16 марта 2020

Я хотел бы понять, как я могу получить построчный минимум для набора столбцов, которые определены в векторе строк, т.е. как получить следующий вывод со следующим вводом:

Input :

t <- data.frame(x= c(1,2,3,4), y= c(2,3,4,5), z = c(4,5,6,7))
vars. <- c('x', 'y')

Мое (не работает) предложение:

t %>% rowwise %>% mutate(min_x_y = min(vars(vars.)))

Вывод должен быть:

  x y z min_x_y
1 1 2 4       1
2 2 3 5       2
3 3 4 6       3
4 4 5 7       4

Ответы [ 3 ]

2 голосов
/ 16 марта 2020

Мы можем использовать pmap_dbl из purrr.

library(dplyr)
library(purrr)

t %>% mutate(min_x_y = pmap_dbl(select(., vars.), min))

#  x y z min_x_y
#1 1 2 4       1
#2 2 3 5       2
#3 3 4 6       3
#4 4 5 7       4

Базовая версия R будет

t$min_x_y <- do.call(pmin, t[vars.])
2 голосов
/ 16 марта 2020

Еще одной альтернативой уже предложенным подходам будет использование комбинации аккуратной оценки и pmin:

# convert character vector of variable names into symbols
vars. <- c('x', 'y') %>% dplyr::syms()

# use tidy evaluation to pass symbols to pmin inside a mutate call
t %>% 
  mutate(min_x_y = pmin(!!!vars.))
#>   x y z min_x_y
#> 1 1 2 4       1
#> 2 2 3 5       2
#> 3 3 4 6       3
#> 4 4 5 7       4
0 голосов
/ 16 марта 2020

Вы можете сделать это по-разному, один из них;

t <- data.frame(x= c(1,2,3,4), y= c(2,3,4,5), z = c(4,5,6,7))
vars. <- c('x', 'y')

t$min_x_Y=t(as.data.frame(t(t)) %>%
  summarise_all(funs(min)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...