簡體   English   中英

使用 sample_n 在 R 中隨機選擇行

[英]Randomly select rows in R using sample_n

df <- data.frame(
  id = c(1:12), 
  day = c(1, 1, 1,1, 2, 2,2, 2, 3,3,3,3), 
  endpoint = c(1, 1, 1,1, 2,2,2,2,1,1,1,1))  
df
#>    id day endpoint
#> 1   1   1        1
#> 2   2   1        1
#> 3   3   1        1
#> 4   4   1        1
#> 5   5   2        2
#> 6   6   2        2
#> 7   7   2        2
#> 8   8   2        2
#> 9   9   3        1
#> 10 10   3        1
#> 11 11   3        1
#> 12 12   3        1

在上面的數據中, day都有一些患者(id)到達endpoint 我正在嘗試隨機選擇s = 1患者的endpoint數量。 對於每一天,只要之前未選擇,當天和前幾天的id都是合格的。 以下代碼符合我的預期,但我必須手動輸入dayendpoint值。 任何關於如何直接從數據中選擇這些值的建議將不勝感激。

library(dplyr)
df$s = 0 
df$s <-ifelse(df$id%in%sample_n(df[df$day<=1 & df$s==0, ], 1)$id, 1, df$s) 
df$s <-ifelse(df$id%in%sample_n(df[df$day<=2 & df$s==0, ], 2)$id, 1, df$s) 
df$s <-ifelse(df$id%in%sample_n(df[df$day<=3 & df$s==0, ], 1)$id, 1, df$s) 
df
#>    id day endpoint s pick_day 
#> 1   1   1        1 0 0
#> 2   2   1        1 1 2
#> 3   3   1        1 1 1
#> 4   4   1        1 1 3
#> 5   5   2        2 1 2
#> 6   6   2        2 0 0
#> 7   7   2        2 0 0
#> 8   8   2        2 0 0
#> 9   9   3        1 0 0
#> 10 10   3        1 0 0
#> 11 11   3        1 0 0
#> 12 12   3        1 0 0

編輯

是否可以添加一個變量來顯示選擇行的day ,如上面的變量pick_day 謝謝。

在基 R 中使用for循環的一種方法:

df$s = 0 
set.seed(123)

for (i in unique(df$day)) {
   temp <- subset(df, day <= i & s == 0)
   ids <- with(temp, sample(id, endpoint[day == i][1]))
   df$s[df$id %in% ids] <- 1
}

df

#   id day endpoint s
#1   1   1        1 0
#2   2   1        1 0
#3   3   1        1 1
#4   4   1        1 1
#5   5   2        2 1
#6   6   2        2 0
#7   7   2        2 0
#8   8   2        2 1
#9   9   3        1 0
#10 10   3        1 0
#11 11   3        1 0
#12 12   3        1 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM