【问题标题】:Assigning labels to different group assignment scenarios将标签分配给不同的组分配方案
【发布时间】:2022-01-24 06:11:26
【问题描述】:

我有一个data.frameids 分配给groups。在最简单的情况下,每个id 都被分配给不同的group

df1 <- data.frame(group = c("a1","a2"),
                  id = c("i1","i2"),
                  stringsAsFactors = F)

在第二种情况下,所有ids 都分配给一个group

df2 <- data.frame(group = c("a1","a1"),
                  id = c("i1","i2"),
                  stringsAsFactors = F)

在第三种情况下,idgroup 的分配不明确:

df3 <- data.frame(group = c("a1","a2","a2"),
                  id = c("i1","i1","i2"),
                  stringsAsFactors = F)

根据上述情况,我正在寻找一个函数,该函数将返回标签 "scenario1"/"scenario2"/"scenario3",给定这样的 data.frameidgroup 列。

换句话说,此函数将返回"scenario1" 用于df1"scenario2" 用于df2"scenario3" 用于df3

显然这可以使用if 语句来完成,但我希望使用dplyr/tidyversedata.table 可以更快地完成。

【问题讨论】:

    标签: r dataframe dplyr data.table tidyverse


    【解决方案1】:

    这是一个检查不同条件的函数。

    library(dplyr)
    
    return_scenario <- function(df) {
      tmp <- df %>% distinct(group, id)
      case_when(
        n_distinct(tmp$group) == 1 ~ 'scenario 2',
        n_distinct(tmp$id) == nrow(tmp) ~ 'scenario 1', 
        TRUE ~ 'scenario 3') 
    }
    
    return_scenario(df1)  
    #[1] "scenario 1"  
    return_scenario(df2) 
    #[1] "scenario 2"   
    return_scenario(df3)  
    #[1] "scenario 3"
    

    如果需要,也可以将其转换为基础 R/data.table 及其等效功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多