如何处理R数据框:提取两列重复值对应列数据并生成新数据框
解决方法
首先,先修正一下你创建数据框的代码,原代码里用<-在data.frame()内赋值会导致列名异常,改用=更规范:
df <- data.frame( A = 1:5, B = c("A","B", "C", "B",'C'), C = c("A", "A", "B", 'B', "B") )
接下来,根据你的需求,我们需要筛选出列B与列C值相等,且该值在列C中重复出现的行,最终保留B列和重命名后的Dupvalues(即原C列)。下面提供两种实现方式:
基础R方法
- 先找出列C中出现次数≥2的重复值:
dup_c_values <- names(which(table(df$C) >= 2))
- 筛选符合条件的行并调整列名:
df2 <- df[df$B == df$C & df$C %in% dup_c_values, c("B", "C")] names(df2)[2] <- "Dupvalues"
运行后得到的df2就是你想要的结果:
> df2 B Dupvalues 1 A A 4 B B
dplyr 方法(更简洁)
如果你习惯用tidyverse工具链,可以用dplyr实现:
library(dplyr) df2 <- df %>% # 按C列分组,判断每组出现次数是否≥2 group_by(C) %>% filter(n() >= 2, B == C) %>% ungroup() %>% # 选择B列,并将C列重命名为Dupvalues select(B, Dupvalues = C)
这样也能得到完全一致的目标数据框。
内容的提问来源于stack exchange,提问作者Raghavan vmvs
相关产品推荐
相关产品推荐

