【问题标题】:Assigning number to column with condition [duplicate]为具有条件的列分配编号[重复]
【发布时间】:2017-02-28 15:46:37
【问题描述】:

假设我有一个 df,

df = data.frame(matrix(rnorm(20), nrow=10))
df$group <- rep(NA,nrow(df)) # add one col

我想将数字 1 和 2 随机分配给每一行的 df$group 列。

此列中数字 1 的百分比为 60%,数字 2 的百分比为 40%。

但组列不会改变数据框的顺序。

     X1         X2           group
1   0.74285307  1.7198207    1
2  -0.68202611  0.2978920    2
3  -0.48945803  0.3789607    1
4  -1.67500642 -0.5613542    1
5   0.81639247  0.3990585    2
6   0.43318010 -0.6742523    2
7   0.72981285  0.4524986    1
8   0.49378867  3.2580579    1
9   0.00837279  1.2755910    1
10 -2.42784153  0.9085665    2

如何使用 R 以优雅的方式做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用sample() 随机选择带权重的数字。如果您希望平均数字具有特定的分布,您可以使用

    df$group <- sample(1:2, nrow(df), replace=T, prob=c(.6, .4))
    

    如果你需要它是“精确的”,你会使用

    num1 <- round(nrow(df)*.6, 0)
    df$group <- sample(c(rep(1, num1), rep(2, nrow(df)-num1)))
    

    【讨论】:

    • 也许replace=TRUE 会更安全。
    • imgur.com/a/rQzFq 为什么当我在概率中尝试 0.8 和 0.2 时它显示 9 个数字 1 而只有 1 个数字 2?
    • @BigSecret 好吧,它从分布中随机抽样,因此任何给定的观察结果都可能不同。你希望它完全是那些比例吗?如果不是整数怎么办?
    • 谢谢,我希望它可以完全按照我的设置。只是简单地把它弄圆?
    • @BigSecrect 我更新了我的答案
    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多