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

如何从ListW列取最小值并保留对应conn列值(R语言)

解决R数据框中分隔列的最小值匹配问题

原始数据

df <- data.frame(A = c(1, 2, 3, 4),
                 conn = c("2, 3, 4", "8, 1, 6", "4, 6, 1, 5", "5, 9, 1, 3"),
                 ListW = c("100, 100, 100", "60, 100, 100", "100, 50, 100, 100", "100, 10, 100, 100"))

需求目标

为每行数据找到ListW列中的最小值,同时保留该最小值对应的conn列元素(若多个元素对应相同最小值则全部保留),最终生成包含A、Nconn(匹配的conn元素)、minListW(最小值)的新数据框。

完整解决方案代码

# 原始数据定义
df <- data.frame(A = c(1, 2, 3, 4),
                 conn = c("2, 3, 4", "8, 1, 6", "4, 6, 1, 5", "5, 9, 1, 3"),
                 ListW = c("100, 100, 100", "60, 100, 100", "100, 50, 100, 100", "100, 10, 100, 100"))

# 拆分conn和ListW列,得到对应元素列表
conn_elements <- strsplit(df$conn, ", ")
listw_elements <- strsplit(df$ListW, ", ")

# 逐行匹配最小值对应的conn元素
processed_rows <- mapply(function(conn_vals, listw_vals) {
    # 将ListW元素转为整数类型
    listw_int <- as.integer(listw_vals)
    # 确定当前行的最小值
    min_val <- min(listw_int)
    # 筛选出所有对应最小值的conn元素
    matched_conns <- conn_vals[listw_int == min_val]
    # 返回整理后的结果
    list(Nconn = paste(matched_conns, collapse = ", "),
         minListW = as.character(min_val))
}, conn_elements, listw_elements, SIMPLIFY = FALSE)

# 合并结果与原数据的A列,生成最终数据框
final_df <- cbind(df["A"], do.call(rbind, processed_rows))

# 输出结果
print(final_df)

代码说明

  1. 拆分列数据:使用strsplit将conn和ListW的分隔字符串拆分为元素列表,保证两组列表的元素位置一一对应;
  2. 逐行处理:通过mapply遍历每一行的两组列表,将ListW元素转为整数后找到最小值,再筛选出conn中位置匹配的元素;
  3. 结果合并:将每行处理后的结果合并为数据框,与原数据的A列组合得到目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:36