【问题标题】:Label a dataframe with if or ifelse and grepl用 if 或 ifelse 和 grepl 标记数据框
【发布时间】:2021-12-06 11:49:06
【问题描述】:

我有一个数据集,它捕获了两个电子学习模块的数据。 电子学习模块用由数字和字母组成的代码表示。例如 1A21 和 2N34。

使用以下代码,我可以创建一个列,在其中为模块代码命名。为了让我作为人类更容易理解。

df$Module <- ifelse(grepl("1A21", df$ModuleCode), "R-101", "R-201")

代码就像一个魅力。但是,我很好奇,如果您的数据框开始捕获两个以上电子学习模块的数据,它会如何工作?如何解决这个问题?

如果这个问题是重复的,我提前道歉。

【问题讨论】:

    标签: r if-statement grepl


    【解决方案1】:

    好的,假设有 3 个代码:1A21、2N34、3D56,名称分别为:“R-101”、“R-201”、“R-301”。

    df$Module <- ifelse(grepl("1A21", df$ModuleCode), "R-101",
                        ifelse(grepl("2N34", df$ModuleCode),  "R-201", "R-301")
    
    

    因此,我们插入一个新级别的 ifelse,而不是第三个参数。

    【讨论】:

      【解决方案2】:

      我不理解您的重命名逻辑。但是按照我的示例,您可以为每个 ModuleCode 分配任何模块名称。

      library(tidyverse)
       df <- tibble::tibble(ModuleCode = c("1A21", "2N34", "3P04"))
       df
      # A tibble: 3 x 1
        ModuleCode
        <chr>     
      1 1A21      
      2 2N34      
      3 3P04      
       df %>% dplyr::mutate(Module = dplyr::case_when(
           grepl("1A21",ModuleCode) ~ "R-101",
           grepl("2N34", ModuleCode) ~ "R-201",
           grepl("3P04", ModuleCode) ~ "R-301"
       ))
      # A tibble: 3 x 2
        ModuleCode Module
        <chr>      <chr> 
      1 1A21       R-101 
      2 2N34       R-201 
      3 3P04       R-301 
      

      【讨论】:

      • 重命名逻辑确实有缺陷。谢谢你的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多