如何在R中为拆分加权数据?

如何在R中为拆分加权数据?,r,dplyr,subset,R,Dplyr,Subset,我想将数据拆分为开发和验证集。数据应该按ID进行分割。对于我的数据个人,大约30%的人我有丰富的观察,其余70%的人有稀疏的数据 对于我的开发集,我希望包括所有拥有丰富数据的个人,即使这样做可能不是一个好的做法,然后用稀疏数据填充个人。验证集不应包含任何丰富数据 一些示例数据: # A tibble: 6 x 4 ID CONC TIME RICH <chr> <dbl> <dbl> <dbl> 1 A 55.0

我想将数据拆分为开发和验证集。数据应该按ID进行分割。对于我的数据个人,大约30%的人我有丰富的观察,其余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上

以下是一种原始方法:

#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%>%groupbyid%>%filtern>n这样的东西是正确的,所有与ID相关联的行都应该包括在内。rich==1的ID的所有行都应包含在开发文件中,并用与ID相关联的所有行填充高达75%的数据。为了澄清这一点,75%-25%的分割应按ID,而不是按观察值。