R语言如何将数据框每列指定数值的20%替换为固定值5
R语言实现数据框按列同值20%替换为5的代码实现
基础版(无需额外安装包)
直接使用R内置函数实现,兼容性最高:
# 自定义替换函数:对单个向量实现同值分组20%替换为5 replace_20pct <- function(vec) { # 遍历向量内所有唯一取值 for (val in unique(vec)) { # 提取当前取值对应的所有位置 val_pos <- which(vec == val) # 计算需要替换的数量:取总数量的20%向下取整,不足1个时不替换 replace_count <- floor(length(val_pos) * 0.2) if (replace_count >= 1) { # 随机抽取对应数量的位置替换为5 replace_pos <- sample(val_pos, size = replace_count) vec[replace_pos] <- 5 } } return(vec) } # 对数据框所有列应用替换函数 df_result <- as.data.frame(lapply(df, replace_20pct))
Tidyverse版(适配dplyr语法)
如果你习惯使用tidyverse生态,可以用以下写法:
library(dplyr) df_result <- df %>% mutate(across(everything(), ~ { for (val in unique(.x)) { pos <- which(.x == val) n <- floor(length(pos) * 0.2) if (n >= 1) .x[sample(pos, n)] <- 5 } .x }))
补充说明
- 如果你需要20%计算时向上取整,可将代码中的
floor替换为ceiling;需要四舍五入则替换为round sample函数保证替换位置是随机的,每次运行结果会有差异,如果需要固定结果可在运行前加set.seed(自定义数字)固定随机种子
内容的提问来源于stack exchange,提问作者meysam
相关产品推荐
相关产品推荐

