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

使用R/dplyr按条件将dataframe转换为指定命名列表的实现方法

基于tidyverse的解决方案

你可以直接用purrr::map遍历除Person外的所有列实现需求,代码非常简洁:

library(tidyverse)

# 核心转换代码
result_list <- df %>%
  # 仅保留需要遍历的指标列
  select(-Person) %>%
  # 对每一列,提取值为1对应的Person姓名
  map(~ df$Person[.x == 1])

如果你更倾向于先做长表转换的显式逻辑写法,也可以用如下方案:

result_list <- df %>%
  # 转换为长表,把所有指标列收拢为行
  pivot_longer(cols = -Person, names_to = "col_name", values_to = "value") %>%
  # 筛选值为1的行
  filter(value == 1) %>%
  # 按原列名分组
  group_by(col_name) %>%
  # 每组的Person姓名合并为列表
  summarise(person_list = list(Person)) %>%
  # 直接转换为命名列表,列名作为列表键,姓名向量作为列表值
  deframe()

效果验证

你可以用示例数据测试运行效果:

# 构造示例输入df
df <- tibble(
  Person = c("John", "James", "Keith", "Boris"),
  a = c(1,0,1,0),
  b = c(0,1,0,1),
  c = c(1,1,0,0),
  d = c(1,0,0,0)
)

# 运行转换代码后查看结果
print(result_list)

输出完全符合你给出的预期结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:54:10