【问题标题】:randomly selecting between two columns of data in a table in R在R中表中的两列数据之间随机选择
【发布时间】:2015-03-24 20:01:03
【问题描述】:

所以我有一个表格,其中包含有关参加两个版本测试的主题的数据。我想做的是编写一些代码,允许我随机选择要包含在决赛表中的测试版本以及要丢弃的测试版本。以下是一些示例数据:

ID     test1    test2

38762   21       36
37874   17       20
37813   15       17
37738   23       31
37470   25       36
37308   31       32
37039   25       16
36045   16        9

我需要这个尽可能接近随机,所以任何帮助将不胜感激。

提前致谢

编辑:所需的输出:

row.names   ID  test1
    67  38762   21
    218 36045   16


row.names   ID  test2
    108 37874   20
    114 37813   17
    117 37738   31
    140 37470   36
    152 37308   32
    175 37039   16

【问题讨论】:

  • help(sample) 是一个很好的起点
  • 您好,感谢您的回复。您是否认为我在某种循环中使用示例函数?
  • 你想要的输出是什么?您是要每行采样还是只想随机选择一整列?
  • 我真的建议你提供你想要的输出,否则人们会一直猜测,这会造成混乱,最终我们会关闭这个问题。
  • 抱歉,我一直忘记这样做。现在编辑问题

标签: r random dataframe


【解决方案1】:

您可以这样做:首先将您的三列设为数据框(如果还没有的话)。然后根据您生成的 0 和 1 的随机向量对该数据帧进行子集化。

 df <- cbind(ID, test1, test2)
 #make vector of 0s and 1s of the length = number of rows of df 
 ran <- sample(c(0,1), nrow(df), replace = TRUE) 

 group1 <- subset(subset(df, select = c(ID, test1)), subset = ran == 0)
 group2 <- subset(subset(df, select = c(ID, test2)), subset = ran == 1)

【讨论】:

  • 看来成功了,谢谢!我想知道是否可以将其扩展为随机选择要保留在具有多个重复行的表中的行?
  • 我并没有声称该解决方案是最有效/最漂亮的解决方案,我只是提出了一种可能的想法。但是回想起来是的,在这里使用 as.data.frame 似乎非常多余。
  • 你没有理解我的评论。 没有需要创建数据,因为 OP 已经拥有数据。不管怎样,如果你已经在使用它,那么正确的方法是 data.frame(ID, test1, test2)not as.data.frame(cbind(ID, test1, test2))。此外,绝对没有必要在每行中使用两次susbset。使用你的方法,你可以做group1 &lt;- df[ran == 0, 1:2] ; group2 &lt;- df[ran != 0, c(1, 3)]
【解决方案2】:
> df=NULL
> df$ID=sample(38700:38800,10,F)
> df$test1=sample(15:25,10,F)
> df$test2=sample(15:35,10,F)
> df=as.data.frame(df)
> df
      ID test1 test2
1  38784    24    19
2  38747    15    15
3  38791    16    34
4  38721    25    32
5  38769    20    23
6  38706    21    26
7  38702    17    29
8  38761    22    28
9  38763    19    25
10 38740    23    16
> df$ran=sample(2,nrow(df),T)
> df$test=ifelse(df$ran==1,df$test1,df$test2)
> df
      ID test1 test2 ran test
1  38784    24    19   1   24
2  38747    15    15   1   15
3  38791    16    34   1   16
4  38721    25    32   1   25
5  38769    20    23   1   20
6  38706    21    26   1   21
7  38702    17    29   2   29
8  38761    22    28   1   22
9  38763    19    25   1   19
10 38740    23    16   2   16
> df$testchosen=ifelse(df$ran==1,"test1","test2")
> df
      ID test1 test2 ran test testchosen
1  38784    24    19   1   24      test1
2  38747    15    15   1   15      test1
3  38791    16    34   1   16      test1
4  38721    25    32   1   25      test1
5  38769    20    23   1   20      test1
6  38706    21    26   1   21      test1
7  38702    17    29   2   29      test2
8  38761    22    28   1   22      test1
9  38763    19    25   1   19      test1
10 38740    23    16   2   16      test2
> 

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2012-04-01
    相关资源
    最近更新 更多