使用IF、THEN和随机值创建一个新变量

3

我正在尝试编写R代码,它能够:

  1. 创建一个新变量
  2. 只有当METRO=0时,才将该变量填充
  3. 填充的值是"1"和"2"的随机分配

我尝试了下面的代码,但并没有成功:

iPUMS_2016 <- mutate (iPUMS_2016, metrounk = ifelse(METRO==0,mutate(rand_int=sample.int(n())) ))

1
如果你包含一个简单的可重现示例,其中包括样本输入和所需输出,那么我们就更容易帮助你进行可能解决方案的测试和验证。 - MrFlick
1个回答

5
我们不需要在ifelse内部进行第二次mutate。此外,可以使用if/else条件,即如果'METRO'中的所有元素都为0,则获取行数上的sample.int
library(dplyr)
mutate(iPUMS_2016, metrounk = if(all(METRO == 0)) sample.int(n()) else  METRO)

如果只是替换数值为0的元素。
mutate(iPUMS_2016, metrounk = ifelse(METRO == 0, sample.int(n()), METRO))

“sample.int(n())”这个语句不太清晰。或者应该是“sample.int(sum(METRO == 0))”。

mutate(iPUMS_2016, metrounk = replace(METRO, METRO == 0, 
               sample.int(sum(METRO == 0, na.rm = TRUE))))

谢谢,这非常有帮助。想知道我需要使用什么或者替换sample.int(n()),以便将随机分配的“1”和“2”值赋给新变量“metrounk”。 - Quantitative72
我尝试过这个 'iPUMS_2016 <- mutate(iPUMS_2016, metrounk = ifelse(METRO == 0, sample(c("5", "6", n(), replace = TRUE), METRO)))',但是出现了这个错误:在ifelse(METRO == 0,sample(c("5","6",n(),replace = TRUE),METRO))中缺少参数“no”,并且没有默认值。 - Quantitative72
@Quantitative72 我认为这是你的错误 sample(c("5", "6", n()c()括号没有关闭。 - akrun
感谢您发现括号问题。运行后,我的频率如下所示。不知道为什么它会给我“3156487”作为metrounk值而不是“6”? <chr> n <int> 1 327920
2 307598
3 776585
3156487 169633
4 1235818
5 338933
- Quantitative72
@Quantitative72 你能否使用 dput 来展示一下例子,因为我无法得到确切的结构。 - akrun
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接