R语言如何按多列数值重复对应行并将原数值替换为1
R实现行重复及数值替换方案
你的代码报错核心原因是rep的第二个参数需要传入长度和数据框行数一致的整数向量,而你传入了多列数据框,参数类型不匹配。
基础R实现(无需额外安装包)
# 1. 计算每行需要重复的次数:取B、C、D列的最大值 rep_times <- apply(df[, -1], 1, max) # 2. 按次数重复行 res_df <- df[rep(seq_len(nrow(df)), rep_times), ] # 3. 将B、C、D列中大于1的数值替换为1 res_df[, -1] <- ifelse(res_df[, -1] > 1, 1, res_df[, -1]) # 4. 重置行名(可选,和你给出的目标格式行号一致) rownames(res_df) <- NULL
运行后res_df即为你需要的结果。
tidyverse风格实现
library(dplyr) library(tidyr) res_df <- df %>% rowwise() %>% # 计算重复次数 mutate(rep_times = max(c_across(B:D))) %>% # 按次数扩展行 uncount(rep_times) %>% # 替换大于1的数值为1 mutate(across(B:D, ~ifelse(.x > 1, 1, .x))) %>% ungroup()
内容的提问来源于stack exchange,提问作者U13-Forward
相关产品推荐
相关产品推荐

