You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于带约束线性模型,构建含行列号及最小值的DataFrame遇阻

解决方法:提取每行最小值对应的列/行号及实际时间值

我完全懂你现在的困扰——你已经有一个包含time.1到time.5这类时间列的DataFrame,想要生成一个新的DataFrame,里面包含行编号、最小值所在的列编号,以及这个最小值的实际时间值。下面我给你分步骤拆解实现方法:


1. 先锁定目标时间列

首先得把所有time.*开头的列单独筛选出来,避免和其他列(比如你的h列)混在一起。假设你的原始DataFrame名叫df,可以用这段代码选中目标列:

time_cols <- grep("^time\\.", names(df), value = TRUE)

2. 逐行提取最小值与对应列信息

接下来用apply函数逐行处理,提取每行的最小值,以及这个最小值所在的列位置:

# 提取每行的最小时间值
min_time_values <- apply(df[time_cols], 1, min)

# 找到最小值在time_cols中的位置,再转换为原始DataFrame的列编号
min_col_pos_in_time <- apply(df[time_cols], 1, which.min)
original_min_col_numbers <- match(time_cols[min_col_pos_in_time], names(df))

# 获取原始行编号
row_numbers <- 1:nrow(df)

注:如果某行有多个相同的最小值,which.min会返回第一个出现最小值的列位置,要是你需要保留所有符合条件的列,可以再调整代码逻辑~

3. 组合成目标DataFrame

最后把这些结果整合起来,就是你想要的结构了:

result_df <- data.frame(
  行编号 = row_numbers,
  列编号 = original_min_col_numbers,
  最小时间值 = min_time_values
)

用你的示例数据验证

拿你给出的部分数据测试:

h column row time.1 time.2 time.3 time.4 time.5
1 1 1 8262 8262 8262 66357 66357
2 1 2 21386 21386 213...

第一行的最小值是8262,which.min会返回第一个匹配的列(也就是time.1对应的列位置),转换后原始列号是4;第二行的最小值21386对应的列号同样是4,生成的新DataFrame就会清晰展示这些信息。

内容的提问来源于stack exchange,提问作者Coopa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:05:52