我有一個data.frame將ids分配給sgroup的。在最簡單的情況下,每個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)
在第三種情況下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"for df1、"scenario2"fordf2和"scenario3"fordf3
顯然這可以通過if陳述句來完成,但我希望使用dplyr/tidyverse或data.table
uj5u.com熱心網友回復:
這是一個檢查不同條件的函式。
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"
如果需要,也可以將其轉換為data.table具有等效功能的基礎 R/ 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/391187.html
上一篇:如何讀取.xpt檔案?
下一篇:按組均值創建標簽
