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

R语言:如何提取DataFrame中任意两列重复数值生成新表

解决R语言提取多列间重复数值的问题

嘿,我来帮你搞定这个需求!你要的是从三列里找出任意两列都出现过的数值,整理成新的DataFrame对吧?我给你分步骤写清楚,还附示例代码,你可以直接套到自己的数据上。

第一步:先构造示例数据(方便你理解)

假设你的原始数据长这样:

# 模拟你的DataFrame
df <- data.frame(
  year1 = c(1, 2, 3, 4, 5),
  year2 = c(3, 4, 6, 7, 8),
  year3 = c(5, 6, 9, 10, 4)
)

第二步:计算每两组列的交集,整理成带标注的DataFrame

如果需要知道每个重复数值具体出现在哪两列,咱们可以给每个交集加上列对标签,再合并起来:

# 加载dplyr包(没装的话先跑 install.packages("dplyr"))
library(dplyr)

# 分别计算三对列的交集,并添加上对应的列对名称
year1_year2 <- tibble(value = intersect(df$year1, df$year2), pair = "year1 & year2")
year2_year3 <- tibble(value = intersect(df$year2, df$year3), pair = "year2 & year3")
year1_year3 <- tibble(value = intersect(df$year1, df$year3), pair = "year1 & year3")

# 把三个结果合并成最终的DataFrame
result_df <- bind_rows(year1_year2, year2_year3, year1_year3)

# 查看结果
print(result_df)

运行后你会得到这样的结果:

# A tibble: 6 × 2
  value pair          
  <dbl> <chr>         
1     3 year1 & year2
2     4 year1 & year2
3     6 year2 & year3
4     4 year2 & year3
5     5 year1 & year3
6     4 year1 & year3

第三步:如果需要去重(同一个值只保留一次)

要是你不想看到重复的数值(比如上面的4出现在三对列里,只留一条记录),可以用distinct去重:

result_df_distinct <- result_df %>% distinct(value, .keep_all = TRUE)
print(result_df_distinct)

结果会变成:

# A tibble: 4 × 2
  value pair          
  <dbl> <chr>         
1     3 year1 & year2
2     4 year1 & year2
3     6 year2 & year3
4     5 year1 & year3

极简版:只需要去重后的数值列表

如果不需要标注列对,只想要所有在任意两列重复的数值,直接这样写:

# 收集所有两两交集的数值,再去重
unique_duplicates <- unique(c(
  intersect(df$year1, df$year2),
  intersect(df$year2, df$year3),
  intersect(df$year1, df$year3)
))

# 转成DataFrame
result_simple <- data.frame(value = unique_duplicates)
print(result_simple)

输出:

value
1     3
2     4
3     6
4     5

说说你之前合并失败的可能原因

你之前合并没成功,大概率是这两个问题:

  • 合并前的子DataFrame列名不统一,导致rbind报错;
  • 没有正确用intersect提取交集,而是直接合并了原始列的数据,结果不对。

试试上面的代码,应该能完美解决你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:04:07