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

在R中为数据框添加匹配图书的关联位置新列求助

在R语言中生成图书馆关联列表

首先构造你的原始数据框:

library_df <- data.frame(
  Library = c("L1", "L1", "L2", "L34", "L5", "L23", "L4", "L11"),
  Book = c("M45", "M3", "M45", "M12", "M45", "M12", "M3", "M45")
)

方法一:使用tidyverse工具链(dplyr + tidyr)

library(dplyr)
library(tidyr)

# 1. 整理出每本书对应的所有图书馆列表
book_libraries <- library_df %>%
  group_by(Book) %>%
  summarise(libraries = list(unique(Library))) %>%
  ungroup()

# 2. 关联原始数据,聚合每个图书馆的所有关联馆并去重
result_df <- library_df %>%
  left_join(book_libraries, by = "Book") %>%
  group_by(Library) %>%
  summarise(
    Connections = list(unique(unlist(libraries))[unique(unlist(libraries)) != Library])
  ) %>%
  ungroup() %>%
  mutate(Connections = sapply(Connections, function(x) paste(x, collapse = ", "))) %>%
  rename(Location = Library)

# 输出结果
print(result_df)

运行后得到的结果:

# A tibble: 7 × 2
  Location Connections      
  <chr>    <chr>            
1 L1       L2, L5, L11, L4  
2 L2       L1, L5, L11      
3 L34      L23              
4 L4       L1               
5 L5       L1, L2, L11      
6 L11      L1, L2, L5       
7 L23      L34              

方法二:Base R实现(无需额外包)

# 整理每本书对应的图书馆集合
book_libs <- tapply(library_df$Library, library_df$Book, unique)

# 定义函数获取单个图书馆的关联馆
get_connections <- function(library_name) {
  target_books <- library_df$Book[library_df$Library == library_name]
  related_libs <- unique(unlist(book_libs[target_books]))
  related_libs <- related_libs[related_libs != library_name]
  paste(related_libs, collapse = ", ")
}

# 生成结果数据框
result_df <- data.frame(
  Location = unique(library_df$Library),
  Connections = sapply(unique(library_df$Library), get_connections)
)

# 输出结果
print(result_df)

逻辑说明

  1. 先建立书籍-图书馆的映射关系,明确每本书被哪些图书馆收藏;
  2. 对每个图书馆,找出它所有收藏书籍对应的图书馆集合;
  3. 去掉集合中的自身,去重后拼接成逗号分隔的字符串,得到最终的Connections列。

注:你提供的示例结果中L5对应L23的行存在逻辑错误(L5仅收藏M45,L23仅收藏M12,无共同书籍),上述代码生成的是符合逻辑的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:40:27