【问题标题】:How to use apply function in a pipe operator如何在管道运算符中使用应用功能
【发布时间】:2020-06-07 15:44:39
【问题描述】:

我有一个数据框,它有几个字符列,后跟几个数字列。 我想使用 %>% 运算符添加一个新列,这是每行数字列中的最大值。

假设数据框如下所示:

字符1,字符2,值1,值2,值3

"字符串", "字符串", 5, 7, 4

"字符串", "字符串", 3, 4, 2

"字符串", "字符串", 2, 8, 6

那么新列的第一行应该是 7,第二行应该是 4,最后一行应该是 8。 我正在尝试在管道运算符中使用 apply 功能,但它无法正常工作。

new_df <- old_df %>%
  mutate(new_column = apply(value1:value3, 1, max))

返回错误:数值表达式只有第一次使用的 XXX 值。

我也尝试使用 max(value1: value3) 代替 apply 但这也不起作用。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以从dplyr 使用rowwise

    library(dplyr)
    df %>% 
      rowwise() %>% 
      mutate(new_column = max(c_across(value1:value2)))
    
    # A tibble: 3 x 6
    # Rowwise: 
      character1 character2 value1 value2 valu3 new_column
      <chr>      <chr>       <int>  <int> <int>      <int>
    1 string     string          5      7     4          7
    2 string     string          3      4     2          4
    3 string     string          2      8     6          8
    

    数据

    library(tidyverse)
    df <- tibble::tribble(
              ~character1,           ~character2, ~value1, ~value2, ~valu3,
      "string", "string", 5L, 7L, 4L,
      "string", "string", 3L, 4L, 2L,
      "string", "string", 2L, 8L, 6L
      )
    

    【讨论】:

      【解决方案2】:

      我们也可以使用pmax

      library(dplyr)
      library(purrr)
      df %>%
         mutate(new_column = reduce(select(., starts_with('value')), pmax))
      # A tibble: 3 x 6
      #  character1 character2 value1 value2 valu3 new_column
      #  <chr>      <chr>       <int>  <int> <int>      <int>
      #1 string     string          5      7     4          7
      #2 string     string          3      4     2          4
      #3 string     string          2      8     6          8
      

      数据

      df <- structure(list(character1 = c("string", "string", "string"), 
          character2 = c("string", "string", "string"), value1 = c(5L, 
          3L, 2L), value2 = c(7L, 4L, 8L), valu3 = c(4L, 2L, 6L)), row.names = c(NA, 
      -3L), class = c("tbl_df", "tbl", "data.frame"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 2019-11-20
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2015-10-08
        相关资源
        最近更新 更多