R 将两个数字随机分配给数据帧

R 将两个数字随机分配给数据帧,r,R,我正在使用R中的一个数据帧,其中有一列$Z$。我希望添加一个额外的列$X$,它由$0.5$和$-0.5$组成,表示两个 不同的群体。我的目标是让$0.5$组中的人数与$0.5$组中的人数相同。我试图寻找解决方案,但我遇到的唯一一件事是样本函数,它没有给出相等的群,只是使用了相等的概率 到目前为止,我使用的代码是: Z = rnorm(1000, 50, sd = 5) df = data.frame(Z) 使用sample函数,我创建了一个随机的行顺序。所以我给你的df行名和第二个df行名。然

我正在使用R中的一个数据帧,其中有一列$Z$。我希望添加一个额外的列$X$,它由$0.5$和$-0.5$组成,表示两个 不同的群体。我的目标是让$0.5$组中的人数与$0.5$组中的人数相同。我试图寻找解决方案,但我遇到的唯一一件事是样本函数,它没有给出相等的群,只是使用了相等的概率

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

Z = rnorm(1000, 50, sd = 5)
df = data.frame(Z)
使用sample函数,我创建了一个随机的行顺序。所以我给你的df行名和第二个df行名。然后我将500个值赋值为-0.5,其余值赋值为0.5

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

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() 
解决思路 在不替换的情况下,随机选择一组从1到行数的整数的一半;补语是另一组

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

X <- data.frame(Z=rnorm(10))
一般化 要将数据帧随机划分为g组,请选择样本1..n,随机排列行索引,并将其减少为g模:

每组的计数都在1以内。

只需将nrowdf的值分别复制-0.5和0.5次/2次,然后对总体进行采样。这将创建一个随机向量,每个值的数目相等

df$X <- sample(rep(c(-0.5, 0.5), nrow(df) / 2))
g <- 2
X$Group <- factor(sample.int(n, n) %% g)
df$X <- sample(rep(c(-0.5, 0.5), nrow(df) / 2))