【问题标题】:Efficient 50% randomly Choosing value from one of two dataframe columns in r高效 50% 随机从 r 中的两个数据框列之一中选择值
【发布时间】:2017-11-18 16:58:00
【问题描述】:

我有一个大数据框(以下只是一个示例): 我想随机选择(概率为 50%)X1X2 的值。

> df = data.frame(matrix(rnorm(20), nrow=7))
> df
           X1         X2
1   0.7091409 -1.4061361
2  -1.1334614 -0.1973846
3   2.3343391 -0.4385071
4  -0.9040278 -0.6593677
5   0.4180331 -1.2592415
6   0.7572246 -0.5463655
7  -0.8996483  0.4231117

我想从 X1 或 X2 中随机选择一个并将其添加为新列。

结果应该是这样的:

 > df
               X1         X2     RC
    1   0.7091409 -1.4061361    -1.4061361
    2  -1.1334614 -0.1973846    -1.1334614
    3   2.3343391 -0.4385071    -0.4385071
    4  -0.9040278 -0.6593677    -0.6593677
    5   0.4180331 -1.2592415     0.4180331
    6   0.7572246 -0.5463655     0.7572246
    7  -0.8996483  0.4231117     0.4231117

对于大数据数据框,最有效的方法是什么?

【问题讨论】:

    标签: r dataframe random bigdata


    【解决方案1】:

    通常的ifelserunif 函数效果很好。如果数据帧中有 100 000 000 行,则在 8 GB RAM 笔记本电脑上需要几秒钟。

    df = data.frame(matrix(rnorm(200000000), nrow=100000000))
    df$RC <- ifelse(runif(nrow(df)) > 0.5, df$X1,df$X2)
    

    【讨论】:

    • 我有 2 个数据框(具有相同的 nrows)。一个 df1$X1 和另一个 df2$X2。它应该同样工作吗?
    • 是的。 ifelse 函数中的输入 df$X1 和 df$X2 是向量,就像 df1$X1 和 df2$X2 一样。
    • 谢谢。它以某种方式插入了一个未出现在每个数据帧中的值。是否有每行添加随机性(0或1)并进行相对选择?
    • 这是 df$RC:[1] 2 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 1 这是第一个 df$X1: [1] 1 0 0 1 1 0 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 这是df$ X2: [1] 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 为什么会这样?
    • 如果您想保留原始值,请先将因子转换为数值df$X1 &lt;- as.numeric(levels(df$X1))[df$X1] df$X2 &lt;- as.numeric(levels(df$X2))[df$X2]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多