【问题标题】:How randomize order across columns in dplyr如何在 dplyr 中跨列随机化顺序
【发布时间】:2021-04-05 09:56:50
【问题描述】:

我必须创建一个数据集,该数据集将生成带有两个答案选项(是/否)的问卷。我需要随机化这些选项,将它们写入数据框,然后将其导出到 csv。

所以 data.frame 看起来像:

data.frame(msg=rep('Do you agree with this statement?',3),first=c('Yes', 'No', 'Yes'), second=c('No', 'Yes', 'No') )

输出:

                                msg first second
1 Do you agree with this statement?   Yes     No
2 Do you agree with this statement?    No    Yes
3 Do you agree with this statement?   Yes     No

dplyr 中生成列firstsecond 以将它们插回数据帧的方式是什么,这样是/否的顺序是随机的,并且有一个是和一个否选项每一行?

我做了类似的事情,但它当然不起作用:

yes_option <-'Yes'
no_option <-'No'
options<-c(yes_option, no_option)
opt_cols <- rep(sample(options, 2),100)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    sample 第一列,然后将剩余值保留在第二列中。

    library(dplyr)
    
    df %>%
      mutate(first = sample(c('yes', 'no'), n(), replace = TRUE), 
             second = ifelse(first == 'yes', 'no', 'yes'))
    

    【讨论】:

    • 谢谢!在sample(c('yes', 'no'), n(), replace = TRUE) 为什么有n() 不只是2?
    • 您尝试过的代码 (rep(sample(options, 2),100)) 的问题是它重复相同的模式 100 次,这意味着如果sample(options, 2) 给出“是”,“否”它将重复相同的事情 100 次这不是真正随机的。 sample(c('yes', 'no'), n(), replace = TRUE) 随机抽样 'yes' 和 'no' 以替换 n() 次数,其中 n() 是数据框中的行数。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 2012-02-17
    • 2013-02-04
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多