随机分配两个数字到数据帧

时间:2018-03-10 16:23:13

标签: r

我正在使用R中的数据框,其中有一列$ Z $。我想要添加一个额外的列$ X $,其中包含$ 0.5 $和$ -0.5 $,这表示两个 不同的群体。我的目标是让团队中的人数达到0.5美元,而团体收入为-0.5美元。我尝试过寻找解决方案,但我唯一能遇到的是sample()函数,它不会给出相同的组,但只是使用相同的概率。

到目前为止,我使用的代码是:

Z = rnorm(1000, 50, sd = 5)
df = data.frame(Z)

3 个答案:

答案 0 :(得分:3)

只需复制-0.50.5每次nrow(df) / 2次的值,然后对人口进行抽样。这将创建一个随机向量,每个值的数量相等。

df$X <- sample(rep(c(-0.5, 0.5), nrow(df) / 2))

答案 1 :(得分:0)

使用sample函数,我创建了一个随机的行顺序。所以我给你的df rownames和第二个df rownames。比我用-0.5分配500个值,其余值为0.5。

多次运行random,看其完全随机,但0.5和-0.5在最终df中存在500次。

library(tidyverse)
random <- function() {
  Z = rnorm(1000, 50, sd = 5)
  df = as_tibble(Z) %>% rename(Z=value) %>% rownames_to_column() # create column for merging

  result <- sample(1:1000) %>%
    as_tibble() %>% 
    mutate(X=ifelse(value>=500, 0.5, -0.5)) %>% # assigning 500 values with -0.5 and the rest with 0.5 
    rownames_to_column() %>% # rownumer as column
    right_join(df, by="rowname") %>% # merge both df's
    select(Z, X, -rowname, -value) # clean up columns
  print(result)
}

random() 

答案 2 :(得分:0)

解决方案想法

随机选择,无需替换,从1到整数的一半的整数的一半;补充是另一组。

让我们创建一个用于测试的数据框:

X <- data.frame(Z=rnorm(10))

以下是一个解决方案的R实现:

n <- nrow(X)
X$Group <- ifelse(sample.int(n, n) * 2 <= n, 1/2, -1/2)

概括

要将数据框随机分组到g组,样本1..n(随机置换行索引)并将其模数减去模g

g <- 2
X$Group <- factor(sample.int(n, n) %% g)

每组的人数都在1之内。