如何在 ifelse 中使用示例

Kus*_*tel 5 if-statement r

我有以下清单

x = rep("a", 100)
Run Code Online (Sandbox Code Playgroud)

如果我使用下表

ifelse(x == "a", sample(c(1:100), 1), 0)
Run Code Online (Sandbox Code Playgroud)

当我第一次运行时,我得到以下输出。

[1] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[22] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[43] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[64] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
[85] 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
Run Code Online (Sandbox Code Playgroud)

我看不到 1 到 100 之间的随机样本。我应该如何实现它。我想要输出的随机性。预期输出示例如下:

  [1]   8  81  46  71  97  18  37  82  74  34  12   5  26   6  66  55
 [17]   2  84  68   9  29   7  38   4  64  90  39  54  75  45  20  42
 [33]  79  36  78  13  47  85  27  69  23  62  15  63  76  25  77  96
 [49]  98  11  53  83  30  41  91  43  88  28  65  10  49  99  56  67
 [65]  16  95  32  92  14  86  50  80  94  58  21  87  51  17  70   1
 [81]  33  57  59  73  52  22  31  44 100  61  60  35  89  24  48  72
 [97]  40  19   3  93
Run Code Online (Sandbox Code Playgroud)

Gre*_*min 4

如上所述,您sample只生成一个数字。要修复它,您ifelse应该如下所示:

x = rep("a", 100)
ifelse(x == "a", sample(c(1:100), length(x)), 0)
Run Code Online (Sandbox Code Playgroud)

或者,如果我正确理解你想要什么,甚至更短的版本:

x = rep("a", 100)
ifelse(x == "a", sample(length(x)), 0)
Run Code Online (Sandbox Code Playgroud)

如果您想用替换采样替换“不是”值(每个数字可以出现多次),我们最终得到以下代码:

x = rep(c("a","b"), 50)
ifelse(x == "a", sample(length(x), replace = TRUE), 0)
Run Code Online (Sandbox Code Playgroud)