【问题标题】:Resampling and merge dataset重采样和合并数据集
【发布时间】:2018-05-17 11:23:36
【问题描述】:

考虑以下数据集:

d1 <- c(2, 3, 8)
d2 <- data.frame(d1)
d1 <- c(1, 7, 9, 10)
d3 <- data.frame(d1)

现在我想从d3 中随机抽取 3 个观察值(没有替换)3 次,每次我想将它与d2 合并。所以我应该有 6 个观察值的三个合并数据框。

我试过了:

for (r in 1:3)
{
  sam <- sample(1:4, 3, replace = FALSE)

  merge <- rbind(d2, d3[sam])
}

但这不起作用。谁能帮帮我?

【问题讨论】:

  • d3[sam] 将选择列。你想使用d3[sam, ]
  • 非常感谢。但现在我只得到一个带有 4 个观察值的数据框。我想要 3 个合并的数据框,每个数据框有 6 个观察值,其中 3 个观察值来自 d2,3 个观察值是从 d3 随机抽取的。
  • replicate(3, rbind(d2, d3[sample(seq_len(nrow(d3)), 3), , drop=FALSE]), simplify = FALSE) 将是一个选项
  • 非常感谢!完美:-)
  • 一个快速的问题:它是否也可以创建一个 data.frame(或更准确地说是一个列表),其中有三个数据框,只有来自d3 的三个随机观察。因此,我将拥有具有 6 个观察值的三个合并数据框(就像您的代码一样),但我还将拥有 3 个数据框以及在合并数据框中选择的 3 个观察值。有意义吗?

标签: r merge resampling


【解决方案1】:

你可以试试

library(tidyverse)
d1 <- data.frame(d1=c(2, 3, 8))
d2 <- data.frame(d1=c(1, 7, 9, 10))
1:3 %>% 
  map(~sample_n(d2, 3) %>% 
      bind_cols(d1))
[[1]]
  d1 d11
1  1   2
2  7   3
3  9   8

[[2]]
  d1 d11
1 10   2
2  1   3
3  7   8

[[3]]
  d1 d11
1  9   2
2  7   3
3 10   8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2018-10-29
    • 2015-02-20
    • 1970-01-01
    • 2023-03-29
    • 2018-06-18
    相关资源
    最近更新 更多