這裏是我想要做的事:優雅的方式,如果else語句的多組
創建分配樣本秩,以行的多個子集的新列基於有多少行是每個子集。分組變量是「層」列。
我通常使用嵌套ifelse語句隨機分配排名,如下所示。有時候這樣做足夠了,但最近我一直在處理越來越多的分組。 40個嵌套ifelse語句可能開始看起來有點過分。
是否有一個更優雅/更快/最簡單的代碼方式來使用dplyr或data.table,可能與apply,lapply,sapply等結合使用?
我試圖使用data.table語句,但我不知道如何使用nrow插入示例函數。
重現數據:
dta <- data.frame(
uniqueID = c(950513, 951634, 951640, 951641,951646, 952732, 952895, 952909, 952910, 952911, 952912,952923, 952924, 952925, 952926, 952927, 952928L, 952933,
952934, 952935),
stratum = c("group9","group6","group15","group13","group9","group8","group9","group15","group15","group15","group15", "group13", "group13",
"group1", "group1", "group1", "group1", "group1", "group1", "group1")
)
下面是我通常會指派一個隨機等級,使用netsed ifelse聲明:
dta<- dta[order(dta$stratum),]
set.seed(7265)
dta$rank <- ifelse(dta$stratum== "group1",sample(1:nrow(dta[dta$stratum== "group1",])),
ifelse(dta$stratum=="group6",sample(1:nrow(dta[dta$stratum== "group6",])),
ifelse(dta$stratum=="group8",sample(1:nrow(dta[dta$stratum== "group8",])),
ifelse(dta$stratum=="group9",sample(1:nrow(dta[dta$stratum== "group9",])),
ifelse(dta$stratum=="group13",sample(1:nrow(dta[dta$stratum== "group13",])),
ifelse(dta$stratum=="group15",sample(1:nrow(dta[dta$stratum== "group15",])),
0))))))
謝謝。我只能接受一個答案,但這個作品也很好! – st2coker