我的数据如下:
x y
1 1
2 2
3 2
4 4
5 5
6 6
7 6
8 8
9 9
10 9
11 11
12 12
13 13
14 13
15 14
16 15
17 14
18 16
19 17
20 18
y是一个分组变量。我想看看这个分组的表现如何。 因此,我想提取由变量y组合在一起的n对案例的样本 和n对不通过变量y组合在一起的情况。为了计算数量 误报和漏报(虚假分组或不分组)。如何提取分组对的样本 和一组未分组的对?
我希望样本看起来像这样(对于n = 6): 分组样本:
x y
2 2
3 2
9 9
10 9
15 14
17 14
未分组的样本:
x y
1 1
2 2
6 8
6 8
11 11
19 17
我将如何在R中进行此操作?
答案 0 :(得分:1)
我并不完全清楚你喜欢做什么,部分原因是因为我觉得你想要实现的目标缺少一些背景。我也不太了解您的预期输出(例如,未分组的示例包含原始数据中不存在的条目6 8
...)
除此之外,这是一种可行的方法。
# Maximum number of samples per group
n <- 3;
# Set fixed RNG seed for reproducibility
set.seed(2017);
# Grouped samples
df.grouped <- do.call(rbind.data.frame, lapply(split(df, df$y),
function(x) if (nrow(x) > 1) x[sample(min(n, nrow(x))), ]));
df.grouped;
# x y
#2.3 3 2
#2.2 2 2
#6.6 6 6
#6.7 7 6
#9.10 10 9
#9.9 9 9
#13.13 13 13
#13.14 14 13
#14.15 15 14
#14.17 17 14
# Ungrouped samples
df.ungrouped <- df[sample(nrow(df.grouped)), ];
df.ungrouped;
# x y
#7 7 6
#1 1 1
#9 9 9
#4 4 4
#3 3 2
#2 2 2
#5 5 5
#6 6 6
#10 10 9
#8 8 8
说明:根据df
拆分y
,然后从包含min(n, nrow(x))
行的子集x
中抽取>1
个样本; rbind
给出了分组df.grouped
。然后,我们从nrow(df.grouped)
中抽取df
个样本,以生成未分组的df.ungrouped
。
df <- read.table(text =
"x y
1 1
2 2
3 2
4 4
5 5
6 6
7 6
8 8
9 9
10 9
11 11
12 12
13 13
14 13
15 14
16 15
17 14
18 16
19 17
20 18", header = T)