在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
相关产品推荐
相关产品推荐

