You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在mutate()与case_when()中使用sample()函数的问题求助

问题解决:创建符合规则的随机变量c

你的需求是:当a不为缺失值时,c取对应行的b值;当a为缺失值时,c随机取0或对应行的b值。原代码逻辑存在问题,导致结果不符合预期。

原代码的问题

原代码中sample(c(0,b),n(),replace=TRUE)的写法错误:

  • c(0,b)会把0和整个b列的所有值合并成一个向量(比如这里是c(0,2,4,5,1)),然后抽样n()次,这是从这个大集合里随机选值,而非针对每个a为NA的行,在0和该行的b值之间二选一,完全偏离需求。

正确解法

可以用case_when结合runif实现逐行的随机二选一,代码如下:

library(dplyr)

df2 <- data.frame(a = c(1,NA,6,NA), b = c(2,4,5,1))

df2 <- df2 %>% 
  mutate(c = case_when(
    !is.na(a) ~ b,  # a非缺失时,c直接取b
    is.na(a) ~ ifelse(runif(n()) > 0.5, 0, b)  # a缺失时,50%概率取0,50%取该行b
  ))

也可以用更简洁的ifelse嵌套写法:

df2 <- df2 %>% 
  mutate(c = ifelse(is.na(a), ifelse(runif(n()) > 0.5, 0, b), b))

运行后,a为NA的行(第2、4行)的c会随机呈现0或对应b的值,非NA行的c则与b完全一致,符合需求。

内容的提问来源于stack exchange,提问作者Chloe_pa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:45:06