【问题标题】:Generating sub tables in R在 R 中生成子表
【发布时间】:2018-09-14 20:40:26
【问题描述】:

我需要将一些 Python 代码翻译成 R。我需要做的是多次从更大的表中随机抽取行,以便以后使用。这是一个插图:

library(data.table)
library(dplyr)

test_table <- data.table(replicate(10, sample(0:1, 10, rep=TRUE)))
test_table

给出一个 10 x 10 的表格(在某些特定的运行中):

所以例如可以得到一个样本:

sample <- sample_n(test_table, 2)
sample

可能看起来像:

但是,我不明白采样多个样本时的结果:

kSampleSize <- 2
kNumSamples <- 3

samples <- replicate(kNumSamples, sample_n(test_table, kSampleSize))
samples

可以给:

但它看起来并不像“sample 列表”。我希望samples[1] 给出类似于sample 的结果,但我得到了一个奇怪的结果(每次运行不同):

1. 1 0

我做错了吗?我误解了输出吗?期望在 Python 中出现“sample 列表”而不是在 R 中?

【问题讨论】:

  • 在可能的重复中查看答案,但您只需将simplify = FALSE添加到replicate
  • simplify 的默认值是 TRUE,在这种情况下强制输入 list,这就是为什么你得到了你所做的数据结构。
  • @Mako212 好的!谢谢!我认为它也可能是重复的,但这个问题似乎还有很多事情要做,以至于我的问题仍然可能对其他人有用。
  • 很公平,我会将我的评论移至实际答案

标签: r jupyter-notebook


【解决方案1】:

replicate 中有一个 simplify 参数,用于确定 R 是否尝试将返回的对象简化为不太复杂的数据结构。

simplify 默认为TRUE,在这种情况下,它会将返回的数据帧列表折叠成list 类型的单个对象。指定 simplify = FALSE 会关闭此行为。

kSampleSize <- 2
kNumSamples <- 3

replicate(kNumSamples, sample_n(test_table, kSampleSize), simplify = FALSE)

返回三个数据框的列表,保留原始数据结构:

[[1]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  1  0  0  0  1  0  0  1  0   1
2:  1  1  1  0  0  1  0  0  1   1

[[2]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  1  1  0  1  0  1  0  1  0   0
2:  1  1  1  1  1  0  0  1  0   1

[[3]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  0  0  1  0  1  1  0  0  1   1
2:  1  1  1  1  0  0  1  0  0   0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多