【发布时间】:2021-12-11 09:29:38
【问题描述】:
下面我的for 循环使用time_to_remove 中的元素随机删除它们study。要删除的time 的可用元素是:2, 3, 4。
但问题不大。 time 元素有顺序。因此,在 sample() 删除之后,我们不能以:time = 0,1,3 或 time = 0,1,2,4 等结束。我们只能以:time = 0,1、time = 0,1,2、time=0,1,2,3 或 time=0,1,2,3,4 结束。
我想知道这样的条件是否可以添加到我下面的当前代码中?
library(tidyverse)
data <- expand_grid(study=1:4,group=1:2, time=0:4)
n = 1
time_to_remove <- unique(data$time)[-(1:2)]
unique_study <- unique(data$study)
for(i in time_to_remove) {
studies_to_remove = sample(unique_study, size = n)
time_to_remove = i
unique_study <- setdiff(unique_study, studies_to_remove)
data <- data %>%
filter(
!( study %in% studies_to_remove &
time %in% time_to_remove ))
}
data %>% as.data.frame()
【问题讨论】:
-
将
time %in% time_to_remove更改为time >= time_to_remove -
@GregorThomas,非常感谢!当我多次运行这个循环时,我似乎从来没有看到只有
time = 0:1或time=0:2的研究。有没有办法增加这种可能性? -
删除您的
time_to_remove中的[-(1:2)]。也许保留为[-1],很难确定... -
@GregorThomas,嗯,这是一个必须保留的限制(我们不能在没有时间 0 和 1 的情况下进行研究)。因为一开始所有研究看起来都完全一样,
time=0:4的研究过多似乎有点奇怪。 -
time_to_remove = i... 使用与被迭代的变量相同的名称不是一个好主意。相反,只需使用i
标签: r dataframe loops random tidyverse