使用dplyr从数据框列采样值并过滤数据框的问题
问题解决:从数据框列中随机采样单个值后过滤数据框
问题根源
你当前代码的错误在于:
sample(1, x)的用法完全不符合需求:第一个参数1表示仅从数值1中采样,第二个参数x是当前行的x值(作为采样数量),这和你要从df$x列中选一个随机值的目标完全偏离。- 在
filter内部直接写这个表达式会导致每行都重新执行一次采样,而不是用一个固定的采样值过滤整表。
正确实现方式
方式一:先采样固定值再过滤(最直观)
set.seed(1) df <- data.frame(x = sample.int(50,100, replace = T), y = rnorm(100)) # 先从x列随机选一个唯一值 sampled_val <- sample(df$x, 1) # 用这个值过滤数据框 df %>% filter(x == sampled_val)
方式二:在管道流中完成(无需单独变量)
用{}创建代码块,确保采样只执行一次:
df %>% { selected <- sample(.$x, 1) filter(., x == selected) }
方式三:极简管道写法
结合pull提取列后采样:
df %>% filter(x == (pull(., x) %>% sample(1)))
验证效果
执行上述代码后,采样得到的值会被固定,过滤结果和你手动写filter(x == 39)(假设采样值是39)的效果完全一致。
内容的提问来源于stack exchange,提问作者CwbRCoding
相关产品推荐
相关产品推荐

