如何在R语言中依据某列最小值提取整行数据并生成新值
在R中自动提取最小值所在行的变量生成新值
完全可以不用手动查找,以下是两种常用的实现方法:
基础R方法
假设你的数据集名为df,要找最小值的变量是target_col,需要提取的变量是col1、col2:
- 先定位最小值所在的行索引:
min_row_idx <- which.min(df$target_col)
- 提取该行的指定变量生成新值(这里用下划线拼接为例,你可以根据需求调整逻辑):
new_value <- paste(df[min_row_idx, "col1"], df[min_row_idx, "col2"], sep = "_")
- 如果要把这个值添加到原数据集的对应行(其他行设为NA):
df$new_column <- ifelse(1:nrow(df) == min_row_idx, new_value, NA)
tidyverse(dplyr)方法
如果习惯用tidyverse语法,步骤更直观:
- 加载dplyr包:
library(dplyr)
- 提取最小值行的指定变量并生成新值:
min_row_data <- df %>% slice_min(target_col, n = 1) %>% # 选取target_col最小的1行,若有多个最小值可调整n或用filter select(col1, col2) new_value <- paste(min_row_data$col1, min_row_data$col2, sep = "_")
- 给原数据集添加对应新列:
df <- df %>% mutate(new_column = ifelse(target_col == min(target_col), paste(col1, col2, sep = "_"), NA))
注意:如果数据集中有多行都取到该变量的最小值,
which.min()只会返回第一个匹配的行索引;而用filter(target_col == min(target_col))或slice_min(target_col, n = Inf)可以选中所有最小值行,按需调整即可。
内容的提问来源于stack exchange,提问作者Carly
相关产品推荐
相关产品推荐

