将标签分配给不同的组分配方案
Posted
技术标签:
【中文标题】将标签分配给不同的组分配方案【英文标题】:Assigning labels to different group assignment scenarios 【发布时间】:2022-01-24 06:11:26 【问题描述】:我有一个data.frame
将id
s 分配给group
s。在最简单的情况下,每个id
都被分配给不同的group
:
df1 <- data.frame(group = c("a1","a2"),
id = c("i1","i2"),
stringsAsFactors = F)
在第二种情况下,所有id
s 都分配给一个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)
根据上述情况,我正在寻找一个函数,该函数将返回标签 "scenario1"/"scenario2"/"scenario3"
,给定这样的 data.frame
和 id
和 group
列。
换句话说,此函数将返回"scenario1"
用于df1
,"scenario2"
用于df2
,"scenario3"
用于df3
显然这可以使用if
语句来完成,但我希望使用dplyr
/tidyverse
或data.table
可以更快地完成。
【问题讨论】:
【参考方案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
及其等效功能。
【讨论】:
以上是关于将标签分配给不同的组分配方案的主要内容,如果未能解决你的问题,请参考以下文章
在将图像分配给 img 标签之前使用 javascript 调整图像大小
将 HTML5 视频标签分配给 webGL 纹理时出现 CORS/跨域安全异常