【问题标题】:For Loop with Logical Condition in R在 R 中具有逻辑条件的 For 循环
【发布时间】: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


【解决方案1】:

您不需要循环。这是 data.table 解决方案的一个示例。

library("data.table")

DT <- data.table(
  id = sample(LETTERS[1:2], 30, replace = TRUE),
  value = sample(seq_len(10), 30, replace = TRUE)
)

DT[, .SD[sample(.N, fifelse(.N > 15, 15, .N))], by = id]

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2013-07-26
    • 2018-01-10
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多