0

我从我的数据帧(包含 20 行)中以宽格式随机抽取了 100 行。我使用了这个 r 代码:

random_100 <- df.wide[sample(nrow(df.wide), 100, replace = T),]

它返回一个包含 100 行(每行都有患者 ID、治疗结果、治疗联盟)的数据框,其中可能会重复患者 ID。这很棒,因为这就是我想要的。

由于我对纵向效应感兴趣,我现在需要从我的长格式数据框中提取相应的行(基于患者 ID)。我尝试了以下代码:

random_long <- subset(df.long, (df.long$id %in% random_100$id))

但是,我没有收到 100 名患者(*治疗长度),而只有 20 名患者。

我需要使用什么代码来允许从长格式数据框中提取患者的频率与从我的宽格式数据框中随机选择的次数一样多?

我希望我的问题足够清楚。

4

1 回答 1

0

可能有一个更优雅的解决方案,但这可能会给你你想要的结果

#make up some data
df.wide <- data.frame(id = 1:20, V1 = letters[1:20])

df.long <- data.frame(id = rep(1:20, 50), V2 = paste0("t", 1:1000))

#pull 100 random sampeles
set.seed(3)

random_100 <- df.wide[sample(nrow(df.wide), 100, replace = T),]

#count how many random samples were selected for each patient
x1 <- table(random_100$id)

#pull the corresponding number from df.long
a1 <- lapply(seq_along(x1), function(i) {
  y <- df.long[df.long$id == names(x1)[[i]],]  
  y1 <- y[sample(row.names(y), x1[[i]], replace = T),]
})

#combine
res <- do.call("rbind", a1)  
于 2018-06-02T20:42:37.207 回答