【问题标题】:using mutate with purrr's map使用 mutate 和 purrr 的地图
【发布时间】:2021-02-18 10:05:29
【问题描述】:

如何在列表中的小标题中添加一列?
数据如下所示,我只想在末尾添加一列,检查第 2 列是否与第 3 列相同
[[1]]
# A tibble: 620 x 4
   DataName              `Technischer Platz...4` `Technischer Platz...5` `Technischer Platz...307`
   <chr>                 <chr>                   <chr>                   <lgl>                    
 1 WrW_SAPP17_VIAUFKAFVC 1202362-001             1202362-001             NA                       
 2 WrW_SAPP17_VIAUFKAFVC 1202362-002 037         1202362-002 037         NA                       
 3 WrW_SAPP17_VIAUFKAFVC 1202362-011             1202362-011             NA                       
 4 WrW_SAPP17_VIAUFKAFVC 1202362                 1202362                 NA                       
 5 WrW_SAPP17_VIAUFKAFVC 1202362-004 052         1202362-004 052         NA                       
 6 WrW_SAPP17_VIAUFKAFVC 1202362-018 005         1202362-018 005         NA                       
 7 WrW_SAPP17_VIAUFKAFVC 1202362-017             1202362-017             NA                       
 8 WrW_SAPP17_VIAUFKAFVC 1202362-012             1202362-012             NA                       
 9 WrW_SAPP17_VIAUFKAFVC 1202362-002 002         1202362-002 002         NA                       
10 WrW_SAPP17_VIAUFKAFVC 1202362-002 039         1202362-002 039         NA

【问题讨论】:

    标签: r purrr tibble


    【解决方案1】:

    我们可以使用:

    library(dplyr)
    library(purrr)
    
    list_df <- map(list_df, ~.x %>% 
                mutate(is_2_same_as_3 = `Technischer Platz...4` == `Technischer Platz...5`))
    

    如果您想根据列的位置进行操作,请使用:

    list_df <- map(list_df, ~.x %>% 
                              mutate(is_2_same_as_3 = .[[2]] == .[[3]]))
    

    在基础 R 中相同的是使用 lapply

    list_df <- lapply(list_df, function(x) transform(x, is_2_same_as_3 = `Technischer Platz...4` == `Technischer Platz...5`))
    list_df <- lapply(list_df, function(x) transform(x, is_2_same_as_3 = x[[2]] == x[[3]]))
    

    【讨论】:

      【解决方案2】:

      让我们用一个更简单的例子

      library(tidyverse)
      
      honda <- tibble(brand = "HONDA",
                      disp  = c(3, 8, 20),
                      hp    = c(3, 90, 115)) 
      
      volvo <- tibble(brand = "VOLVO",
                      disp  = c(3, 8, 20),
                      hp    = c(3, 34, 115)) 
      
      list_df <- list(honda, volvo)
      
      
      list_df %>% map(~ mutate(., check = disp == hp))
      #> [[1]]
      #> # A tibble: 3 x 4
      #>   brand  disp    hp check
      #>   <chr> <dbl> <dbl> <lgl>
      #> 1 HONDA     3     3 TRUE 
      #> 2 HONDA     8    90 FALSE
      #> 3 HONDA    20   115 FALSE
      #> 
      #> [[2]]
      #> # A tibble: 3 x 4
      #>   brand  disp    hp check
      #>   <chr> <dbl> <dbl> <lgl>
      #> 1 VOLVO     3     3 TRUE 
      #> 2 VOLVO     8    34 FALSE
      #> 3 VOLVO    20   115 FALSE
      

      reprex package (v1.0.0) 于 2021-02-18 创建

      【讨论】:

        猜你喜欢
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 2023-01-27
        相关资源
        最近更新 更多