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

在R中实现:提取各数值对应的来源暴露列

R实现:提取非空值对应的来源列并整理格式

以下是两种可行的实现方案,分别基于tidyverse和Base R,你可以根据自己的使用习惯选择:

方案一:使用tidyverse(推荐,代码更直观)

先构造可测试的示例数据(你可以替换成自己的真实数据):

library(tidyverse)

# 示例数据,模拟你的表格结构
df <- tibble(
  `Exposure A` = c("ddd", NA, "fff", "ddd"),
  `Exposure B` = c("ddd", "ggg", NA, NA),
  `Exposure C` = c(NA, NA, "fff", "hhh")
)

核心处理代码:

# 转换格式并聚合列名
result <- df %>%
  # 将宽表转为长表,保留列名和对应值
  pivot_longer(cols = everything(), names_to = "Column", values_to = "Value") %>%
  # 过滤掉空值
  filter(!is.na(Value)) %>%
  # 按值分组
  group_by(Value) %>%
  # 合并该值对应的所有唯一列名,用顿号分隔
  summarise(Columns = str_c(unique(Column), collapse = "、")) %>%
  # 按值排序(可选)
  arrange(Value)

# 查看结果
print(result)

运行后输出结果:

# A tibble: 4 × 2
  Value Columns                 
  <chr> <chr>                   
1 ddd   Exposure A、Exposure B
2 fff   Exposure A、Exposure C
3 ggg   Exposure B             
4 hhh   Exposure C             

方案二:使用Base R(无需额外安装包)

如果不想加载tidyverse包,可以用Base R实现:

# 示例数据
df <- data.frame(
  `Exposure A` = c("ddd", NA, "fff", "ddd"),
  `Exposure B` = c("ddd", "ggg", NA, NA),
  `Exposure C` = c(NA, NA, "fff", "hhh"),
  stringsAsFactors = FALSE
)

# 转换为键值对格式
key_val <- stack(df)
# 过滤空值
key_val <- key_val[!is.na(key_val$values), ]
# 按值分组合并列名
result_base <- aggregate(ind ~ values, data = key_val, FUN = function(x) paste(unique(x), collapse = "、"))
# 重命名列
colnames(result_base) <- c("Value", "Columns")
# 按值排序
result_base <- result_base[order(result_base$Value), ]

print(result_base)

两种方案最终输出的格式完全一致,都能实现你需要的「Value-Column」对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:42:40