функция mutate_at в R - PullRequest
       14

функция mutate_at в R

0 голосов
/ 05 января 2019

Я бы хотел получить результат, как указано в таблице.

Может ли кто-нибудь помочь с вышеуказанными кодами? Задача в основном о том, как вставить новый столбец с помощью функции. Но я не уверен, должен ли я использовать mutate_at. Ошибка пришла с длиной> 1, я понятия не имею об этом.

Спасибо !!!

## I would like to achieve the output as follow
## A B C best
## 1 2 4 Par
## 2 3 1 Lab
## 3 4 9 Par
## 4 1 0 Edu

## I tried the following codes, however, it didnt work
Library("dplyr")
Library("tidyr")
   data <- data.frame(A = c(1,2,3,4),
                       B = c(2,3,4,1),
                       C = c(4,1,9,0))

best <- function(x,y,z){
         if ((x>y)&(x>z)){
         print("Edu")
         if ((y>x)&(y>z))
         print("Lab")
         if ((z>x)&(z>y))
         print("Par")
         }
    }

data_new <- mutate_at(data, vars(A:C), funs(best))

Могу ли я спросить, как я могу решить эту проблему

Ответы [ 3 ]

0 голосов
/ 05 января 2019
best <- function(x,y,z){
  if ((x>y)&(x>z)){
    "Edu" } else if ((y>x)&(y>z)){
    "Lab" } else if ((z>x)&(z>y)){
    "Par"
    }
}
library(dplyr)
data %>% rowwise() %>% mutate(best=best(A,B,C))

Я не думаю, что вы можете использовать mutate_at в вашем случае см. ?mutate_at. Нам нужно rowwise(), так как best не является векторной функцией.

0 голосов
/ 05 января 2019

Rowwise можно избежать с помощью pmap.

best <- function(x,y,z) {
  case_when( x > y & x > z ~ "Edu",
             y > x & y > z ~ "Lab",
             z > x & z > y ~ "Par",
             TRUE ~ NA_character_)
}

data %>% bind_cols(best_col = pmap_chr(unname(.),best))

  A B C best_col
1 1 2 4      Par
2 2 3 1      Lab
3 3 4 9      Par
4 4 1 0      Edu
0 голосов
/ 05 января 2019

Как насчет

data_new <- data %>%
    mutate(
        best = case_when(
            A>B & A>C ~ "Edu",
            B>A & B>C ~ "Lab",
            C>A & C>B ~ "Par",
            TRUE ~ NA_character_
        )
   )

Или для вас важно работать независимо от имен столбцов?

...