R语言data.frame如何基于price1-price4列新增final_price等两个指定变量
R语言实现方案
以下两种方案均可实现需求:
方案1:基础R实现(无需加载额外依赖包)
运行效率高,适合处理大数据量数据集:
# 提取目标价格列 price_cols <- paste0("price", 1:4) price_matrix <- as.matrix(ori_data[, price_cols]) # 定位每行第一个非0值的列索引 first_nonzero_idx <- max.col(price_matrix != 0, ties.method = "first") # 生成两个新变量 ori_data$final_price <- price_matrix[cbind(seq(nrow(price_matrix)), first_nonzero_idx)] ori_data$final_price_from <- price_cols[first_nonzero_idx]
方案2:tidyverse 风格实现
代码可读性强,适合纳入tidy数据处理工作流:
library(dplyr) ori_data <- ori_data %>% rowwise() %>% mutate( first_nonzero_pos = which(c_across(starts_with("price")) != 0)[1], final_price = get(paste0("price", first_nonzero_pos)), final_price_from = paste0("price", first_nonzero_pos) ) %>% ungroup() %>% select(-first_nonzero_pos)
说明:如果某行所有price列均为0(如示例数据中的category为i的行),上述方案会返回NA,可根据业务需要自行添加判断逻辑设置默认值。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

