是否有一个R函数可以基于组选择n个个体?

时间:2019-08-28 08:42:10

标签: r

我有1250万条记录的数据集,我需要随机选择大约250万条记录。但是,这些人属于55284个小组,我希望保持小组完整。

所以基本上我想删除组,直到我剩下250万条记录,或者选择组,直到我有250万个人为止。

如果这是我的数据:

data <- data.frame(
    id = c(1, 2, 3, 4, 5),
    group = (1, 1, 2, 2, 3)
)

我不想删除id1并保留id2,我想既保留它们又丢弃它们,因为它们在同一group(2)中。 因此,理想情况下,此函数随机选择一个组,对这些个体进行计数并将其放入数据集中,然后再次执行相同的操作,不断对个体进行计数,直到拥有约250万(可以说:如果n超过2.5,则停止将组放入新的数据集中。

不幸的是,我还没有找到一个函数,我还不够熟练,无法自己组装一些东西。 希望有人能帮助我!

谢谢

2 个答案:

答案 0 :(得分:1)

评论太久,无法回答。您需要这样的东西吗?

mov %ecx, %edx

对于随机方法,我们可以使用#Order data by group so rows with same groups are together data1 <- data[order(data$group), ] #Get all the groups in first 2.5M entries selected_group <- unique(data1$group[1:2500000]) #Subset those groups so you have all groups intact final_data <- data1[data1$group %in% selected_group, ] 循环

while

答案 1 :(得分:1)

这是一种可能性。我使用toydata和33(而不是2.5)百万的阈值进行了演示。首先,我创建玩具组矢量:

threshold <- 33
set.seed(111)
mygroups <- rep(1:10, rpois(10, 10))

在此玩具示例中,组1具有10个个体,组2具有8个个体,依此类推。 现在,我将各组随机排列,并使用cumsum确定何时超过阈值:

x <- cumsum(table(mygroups)[sample(1:10)])
randomgroups <- as.integer(names(x[x <= threshold]))
randomgroups
[1] 1 7 5