为不同的组分配场景分配标签
Assigning labels to different group assignment scenarios
我有一个 data.frame
将 id
分配给 group
。在最简单的场景中,每个 id
被分配给不同的 group
:
df1 <- data.frame(group = c("a1","a2"),
id = c("i1","i2"),
stringsAsFactors = F)
在第二种情况下,所有 id
都分配给一个 group
:
df2 <- data.frame(group = c("a1","a1"),
id = c("i1","i2"),
stringsAsFactors = F)
在第三种情况下,id
到 group
的赋值不明确:
df3 <- data.frame(group = c("a1","a2","a2"),
id = c("i1","i1","i2"),
stringsAsFactors = F)
我正在寻找一个函数,它 return 一个标签 "scenario1"/"scenario2"/"scenario3"
给定这样一个 data.frame
和 id
和 group
列,根据上述情况。
换句话说,此函数将 return "scenario1"
用于 df1
,"scenario2"
用于 df2
,"scenario3"
用于 df3
显然这可以通过 if
语句完成,但我希望使用 dplyr
/tidyverse
或 data.table
更快
这是一个检查不同条件的函数。
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
及其等效功能。
我有一个 data.frame
将 id
分配给 group
。在最简单的场景中,每个 id
被分配给不同的 group
:
df1 <- data.frame(group = c("a1","a2"),
id = c("i1","i2"),
stringsAsFactors = F)
在第二种情况下,所有 id
都分配给一个 group
:
df2 <- data.frame(group = c("a1","a1"),
id = c("i1","i2"),
stringsAsFactors = F)
在第三种情况下,id
到 group
的赋值不明确:
df3 <- data.frame(group = c("a1","a2","a2"),
id = c("i1","i1","i2"),
stringsAsFactors = F)
我正在寻找一个函数,它 return 一个标签 "scenario1"/"scenario2"/"scenario3"
给定这样一个 data.frame
和 id
和 group
列,根据上述情况。
换句话说,此函数将 return "scenario1"
用于 df1
,"scenario2"
用于 df2
,"scenario3"
用于 df3
显然这可以通过 if
语句完成,但我希望使用 dplyr
/tidyverse
或 data.table
这是一个检查不同条件的函数。
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
及其等效功能。