R中的mutate_at函数

时间:2019-01-04 21:32:02

标签: r apply mutate

我希望实现下表所示的输出。

有人可以帮忙上面的代码吗?任务主要是关于如何 通过使用功能插入新列。但是我不确定是否必须使用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 :(得分:0)

怎么样

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

对于您来说,独立于列名进行工作是否重要?

答案 1 :(得分:0)

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不是向量化函数。

答案 2 :(得分:0)

可以通过使用pmap避免行进。

cat |