gpt4 book ai didi

当数据为长格式时,R 中的随机样本

转载 作者:行者123 更新时间:2023-12-01 01:59:39 24 4
gpt4 key购买 nike

我需要随机采样一个以长格式排列的数据集。在我的数据集中,每个主题都有 4 个观察值,因此如果我随机抽取一行,我会随机丢失每个主题的一个或多个观察值。

这是用于说明目的的模拟数据,我的数据要大得多。

sub sex group   dv1 dv2
P1 m A 0.66 0.94
P1 m B 0.98 0.26
P1 m C 0.02 0.03
P1 m D 0.60 0.30
P2 m A 0.92 0.99
P2 m B 0.82 0.09
P2 m C 0.44 0.67
P2 m D 0.53 0.80
P3 f A 0.29 0.22
P3 f B 0.46 0.20
P3 f C 0.37 0.77
P3 f D 0.76 0.54
P4 m A 0.28 0.99
P4 m B 0.16 0.57
P4 m C 0.46 0.75
P4 m D 0.28 0.21

在这个例子中,我需要随机选择 2 个男性。例如,我尝试使用 dplyr 打包(见下文),但如果我给出 2 个样本,它只会给我 2 行 sex="m"和 2 表示 sex="f" .总共有 4 个随机选择的行。我需要做的是给我 8 行,其中 4 行来自一名男性,4 行来自另一名男性。将分组参数更改为 sub不起作用,因为它咆哮说组中只有 2 个级别(实际上,它可以在这个玩具示例中工作,因为每个子集有 4 个级别,但请注意,我从更大的数据集中选择了 50 个样本) .此外,它只会为每个子提供 2 个随机行,这不是我需要的。
library(dplyr)  
subset <- data %>%
group_by(sex) %>%
sample_n(2)

请不要建议将日期 reshape 为宽格式并在那里进行采样,因为我知道我可以做到这一点。我相信一定有一种方法可以以长格式进行采样。

最佳答案

我会从患者姓名中采样,然后按这些采样姓名进行过滤:

看看所有的男性

male_subset <- data %>% filter(sex == "m")

寻找唯一的男性 ID
male_IDs <- unique(male_subset$sub)

来自唯一 ID 的样本
sampled_IDs <- sample(male_IDs, 2)

现在,您可以根据这些采样 ID 对数据进行子集化:
data %>% filter(sub %in% sampled_IDs)

这应该为 2 个采样个体中的每一个返回所有四行。

关于当数据为长格式时,R 中的随机样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com