代码之家  ›  专栏  ›  技术社区  ›  LucaS

从嵌套df中的条件变量突变主df中的变量

  •  1
  • LucaS  · 技术社区  · 3 年前

    如何使用基于列表列中嵌套数据的条件(if-else)语句在主数据帧中创建新变量?

    如果我们采用汽车数据集:

    library(dplyr)
    
    cars_nest <- mtcars %>%
      group_by(cyl) %>%
      nest()
    

    并且想要创建一个二进制变量,其中碳水化合物的任何值>2等于1,否则为0。我尝试了以下操作,但出现了错误。

    cars_nest  <- cars_nest |> 
      mutate(test = ifelse(any(cars_nest$carb) > 2, 1, 0))
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   benson23    3 年前

    代码中的一些问题:

    1. 你的 any 应包括条件(即。 any(... > 2) )
    2. 你没有 cars_nest 要在中使用的变量 mutate ,这是数据帧对象的名称,而不是列(它应该是 data 列)
    3. 你需要 rowwise 对于这种类型的操作

    一个建议:

    1. 由于逻辑比较的输出( ... > 2 )已经合乎逻辑,您可以利用 as.integer 不使用 ifelse

    因此,代码应该是:

    library(tidyverse)
    
    cars_nest <- mtcars %>%
      group_by(cyl) %>%
      nest() 
      
    cars_nest %>% 
      rowwise() %>% 
      mutate(test = as.integer(any(data$carb > 2)))
      # or mutate(test = ifelse(any(data$carb > 2), 1, 0))
    
    # A tibble: 3 × 3
    # Rowwise:  cyl
        cyl data                test
      <dbl> <list>             <dbl>
    1     6 <tibble [7 × 10]>      1
    2     4 <tibble [11 × 10]>     0
    3     8 <tibble [14 × 10]>     1