R语言数据框:统计与当前行不同的唯一(SID,Var1)组合数
解决方法:统计每行对应的不同唯一(SID, Var1)组合数量
首先,我先明确你的需求:对于数据框中的每一行,计算所有与当前行的(SID, Var1)组合不相同的唯一(SID, Var1)组合的总数。
第一步:确认数据与唯一组合总数
先基于你的代码生成可复现的数据,并计算所有唯一的(SID, Var1)组合数量:
# 设置随机种子保证结果一致 set.seed(123) df <- data.frame(SID=sample(1:4,15,replace=T), Var1=c(rep("A",5),rep("B",5),rep("C",5)), Var2=sample(2:4,15,replace=T)) # 计算唯一(SID, Var1)组合的总数 total_unique <- nrow(unique(df[, c("SID", "Var1")])) total_unique # 示例输出:9(对应你给出的示例数据里的9种唯一组合)
第二步:为每行计算目标值
因为我们只需要排除当前行所在的那一种唯一组合,所以每行的目标值就是total_unique - 1。下面提供两种实现方式:
方法1:用dplyr(简洁直观)
如果你习惯用tidyverse工具链,这个方法更流畅:
library(dplyr) df_result <- df %>% mutate(diff_unique_count = n_distinct(select(., SID, Var1)) - 1) # 查看前几行结果 head(df_result)
方法2:用Base R(无需额外安装包)
如果不想加载第三方包,base R也能轻松实现:
# 添加新列存储结果 df$diff_unique_count <- total_unique - 1
结果说明
运行代码后,数据框会新增一列diff_unique_count,每一行的值都是8(总唯一组合数9减去当前行自己的组合)。比如示例中任意一行的组合是(4,A),和它不同的唯一组合有8种;组合是(2,C)时,结果同样是8种,完全符合需求。
内容的提问来源于stack exchange,提问作者shotes
相关产品推荐
相关产品推荐

