如何在R语言中生成以上一列值为上限的间隔采样新列?
解决方案
原代码的问题在于,mutate中直接使用seq(1, A, 1/4)和sample时,这两个函数不会逐行处理A列的每个值,而是将A作为整体向量处理,导致采样逻辑不符合预期。以下是两种可行的解决方法:
方法1:使用dplyr的行分组(rowwise)
library(dplyr) # 生成示例数据 my_data = data.frame(A = sample(seq(1, 20, 1/4), 10)) # 逐行生成采样列B my_data %>% rowwise() %>% mutate(B = sample(seq(1, A, 1/4), size = 1)) %>% ungroup()
rowwise()会强制后续的mutate操作逐行执行,确保每行的A值都能单独用来生成对应的序列并采样。- 完成后用
ungroup()取消行分组,避免影响后续的数据操作。
方法2:使用purrr的映射函数(map_dbl)
library(dplyr) library(purrr) # 生成示例数据 my_data = data.frame(A = sample(seq(1, 20, 1/4), 10)) # 遍历A列每个值生成采样结果 my_data %>% mutate(B = map_dbl(A, ~sample(seq(1, .x, 1/4), size = 1)))
map_dbl()会遍历A列的每个元素(~后的.x指代当前元素),对每个元素执行采样逻辑,最终返回数值型向量作为新列B。
内容的提问来源于stack exchange,提问作者Ramakrishna S
相关产品推荐
相关产品推荐

