R语言如何对指定向量列循环排除单列执行函数并将结果存入data frame新列
解决方案
你可以通过循环遍历指定列索引+do.call批量调用pmax实现需求,完整可运行实现如下:
var.min <- function(data, col.names){ new.df <- data # 初始化存储新列名的向量 new.columns <- c() # 遍历每一个需要排除的指定列 for (i in seq_along(col.names)) { # 本次计算保留的列(排除第i个指定列) cols_keep <- col.names[-i] # 批量调用pmax计算保留列的行最大值 col_val <- do.call(pmax, new.df[, cols_keep]) # 生成符合规则的新列名 col_name <- paste0("max.def.col.exc.", i) # 新列写入数据框 new.df[[col_name]] <- col_val # 记录新列名 new.columns <- c(new.columns, col_name) } # 同时返回新数据框和新列名向量,方便后续调用 return(list( df = new.df, new_col_names = new.columns )) }
调用示例
# 测试数据 Name <- c("Case 1", "Case 2", "Case 3", "Case 4", "Case 5") C1 <- c(1, 0, 1, 1, 0) C2 <- c(0, 1, 1, 1, 0) C3 <- c(0, 1, 0, 0, 0) C4 <- c(1, 1, 0, 1, 0) Data <- data.frame(Name, C1, C2, C3, C4) # 调用函数 res <- var.min(Data, col.names = c("C1", "C2", "C3")) # 提取结果数据框 new.df <- res$df # 提取独立存储的新列名向量 new.columns <- res$new_col_names
运行后得到的new.df和你给出的预期输出完全一致,且new.columns会自动存储所有生成的新列名称,不需要手动硬编码。该实现支持任意长度的col.names输入(长度≥2即可),不需要随列数变化修改逻辑。
内容的提问来源于stack exchange,提问作者CNiessen
相关产品推荐
相关产品推荐

