【问题标题】:How can you weight data for splitting in R?您如何加权数据以在 R 中进行拆分?
【发布时间】:2019-12-13 13:25:25
【问题描述】:

我想将我的数据拆分为开发和验证集。数据应按 ID 拆分。对于我大约 30% 的 data 个人,我有丰富的观察结果,其余 70% 的数据很少。

对于我的开发集,我想包含所有拥有丰富数据的个人(即使这样做可能不是一个好习惯),然后用稀疏数据填充个人。验证集不应包含任何丰富的数据。

一些示例数据:

# A tibble: 6 x 4
  ID     CONC  TIME  RICH
  <chr> <dbl> <dbl> <dbl>
1 A      55.0     1     1
2 A      52.6     2     1
3 A      50.2     3     1
4 A      47.9     4     1
5 E      40.7     2     0
6 E      38.3     2     0

我知道sample() 函数,但我不知道如何“随机”拆分带有权重的数据。

编辑:所有 ID 都有几个观察值,因此随机化应该在 ID 上取决于 RICH。如果有超过 n 个观察值,则将个人指定为拥有丰富的数据。

编辑 2:75%/25% 的分配应该在 ID 上。

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    这是一种原始方法:

    #Unique ID's
    n <- unique(df$ID) 
    #Get all rich ID's
    rich_set <- unique(df$ID[df$RICH == 1])
    #count number of unique ID's in development set
    development_n <- ceiling(length(n) * 0.75)
    #select random Id's to complete development set
    devel_ID <- sample(setdiff(n, rich_set), development_n - length(rich_set))
    
    #Subset data
    development_set <- subset(df, ID %in% c(rich_set, devel_ID))
    validaton_set <- subset(df, !ID %in% c(rich_set, devel_ID)))
    

    【讨论】:

    • 感谢您的建议 - 我意识到我添加了非代表性示例数据。随机化应基于 ID,并由 RICH 加权,因为所有个体都有多个观察值。我很抱歉。
    • @mhh 我不清楚您的预期输出。是否要从 ID 中选择所有具有丰富数据的行?所以像df %&gt;% group_by(ID) %&gt;% filter(n() &gt; n)
    • 没错,与 ID 关联的所有行都应包括在内。 ID 的所有行,其中rich==1 应包含在开发文件中,并使用与 ID 关联的所有行填充多达 75% 的数据。澄清一下,75%-25% 的划分应该是 ID,而不是观察。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2015-08-12
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多