我有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,则停止将组放入新的数据集中。
不幸的是,我还没有找到一个函数,我还不够熟练,无法自己组装一些东西。 希望有人能帮助我!
谢谢
答案 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