【问题标题】:function mutate_at in RR中的函数mutate_at
【发布时间】:2019-01-04 21:32:02
【问题描述】:

我想实现如下表的输出。

任何人都可以帮助解决上述代码吗?任务主要是关于如何 使用函数插入新列。但我不确定是否必须使用 mutate_at。错误来自 length > 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))

请问我该如何解决这个问题

【问题讨论】:

    标签: r apply dplyr


    【解决方案1】:

    怎么样

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

    或者独立于列名工作对您来说很重要吗?

    【讨论】:

      【解决方案2】:
      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 不是矢量化函数。

      【讨论】:

      • here如何在R中使用if else语句。
      【解决方案3】:

      使用 pmap 可以避免 Rowwise。

      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
      

      【讨论】:

        猜你喜欢
        • 2018-10-23
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多