【发布时间】:2020-06-29 16:56:06
【问题描述】:
我正在尝试创建一个测试/训练数据集。数据集的标准是每个用户最多必须有 15 条记录。因此,如果用户拥有 > 15 条记录,我只想获取 15 条记录。
我的 for 循环卡在无限循环中。
testid=NULL
for(a in unique(oobData$user id)){
if(max(oobData$surgeon_case_count[oobData$`user id`==a])>=15){
testid=c(testid,sample(which(oobData$`user id`==a),size=15))}
else{
testid=c(testid,sample(which(oobData$`user id`==a),size=max(oobData$surgeon_case_count[oobData$`user id` ==a])))
}
}
有什么想法吗?
【问题讨论】:
-
如果您使用
split()将您的数据除以user id会容易得多。然后使用lapply()从每个user id中抽取样本。您需要创建一个小函数来检查每个用户的行数,然后从每个用户中抽取 15 个或更少的样本。您的方法需要为每个user id搜索整个数据库。 -
感谢您提到 split 我能够使用带有 for 循环的 split 可能类似于 lapply 和 sample 来存档所需的结果。
标签: r for-loop logical-operators