【问题标题】:Random sampling with replace = FALSE, results in duplicates being selected using Rreplace = FALSE 的随机抽样,导致使用 R 选择重复项
【发布时间】:2021-07-10 12:04:17
【问题描述】:

我有一个要求,需要将 70 个奇数数据分成 7 个随机数据帧,而不选择任何重复的行,即 Replace = FALSE 已被使用,但它仍然选择重复的行 即使使用 sample_n() 函数结果也是一样的。

这是一个已知的错误吗?

如何解决这个问题,以应对未来的需求和手动选择的艰巨工作。

df = name = c("arjun","Andrea","Biswas","Ann","Biju","Sheela","Deepti","Betty","Hema","Gowri"," Kunal”、“Anamika”、“Ashik”、“Hina”、“Kiran” )

性别 = c("M","F", "M","M","F", "M","F","F","F", "F","M" ,"F", "F","F","M")

等明智的 5 与附加列 每组需要两名女性,其余男性。 但基本分裂本身是在组中生成重复的 说阿琼在第 1 组和第 3 组 Andrea 属于第 2 组和第 3 组等,这不应该发生。

我试过的代码

library(dplyr)
L4 = list()
dfc = list()
f = list()

numzone <- c(1:5)

for (i in numzone){

L4  <-  df[sample(nrow(df) ,size = 3 ,replace = FALSE),]




f<-paste("df", i, sep="")

dfc <- L4



if (i %in% c(1:5)) {

f <- dfc[]
}



print(f)

另外,我还需要将这些单独的行分配给动态数据框,可能来自定义的列表。

【问题讨论】:

  • 感谢我尝试运行的更新,但池出现错误,未定义池
  • Error in dfn : object 'dfn' not found
  • dfn 被替换为 df 并以​​ 7 的倍数包含更多数据,例如 14、28 左右,例如 df = name = c("arjun","Andrea", "Biswas" "alok", "Ajay", "Biinus") 性别 = c("M","F", "M")

标签: r frame sampling


【解决方案1】:

我认为您没有发现错误,但是如果没有示例数据和您正在使用的代码,就很难说。我敢打赌你不止一次运行sample()(或任何类似的函数),即使你使用replace=FALSE,也可能多次返回相同的值。换句话说,replace=FALSE 只会影响sample() 的每次调用。

如果您需要更具体的建议,请随时使用示例数据集和您正在使用的代码来编辑您的问题。

这是解决此问题的一般方法。有关采样的更多信息,here,以及有关拆分的更多信息,here

# values to be randomly sampled
pool <- 1:70

# dataframe to receive random samples
dat <- data.frame(matrix(ncol = 7, nrow = 0))

# take random samples, split into  7 groups
split(sample(x = pool, size = 70, replace = FALSE), f = ceiling(seq_along(pool)/10))

# rbind to other data
rbind(dat, split(sample(x = pool, size = 70, replace = FALSE), f = ceiling(seq_along(pool)/10)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多