如何在R中比较不同长度数据框的列、匹配值并计算匹配率
数据框匹配对齐与匹配占比计算方案
原始数据
首先定义并查看两个数据框:
# 定义df1 df1 <- data.frame( col1 = 1:7, col2 = c("a", "b", "c", "d", "e", "f", "g") ) # 定义df2 df2 <- data.frame( col1 = c(1,2,3,4,10), col2 = c("a","c","f", "g", "z") )
查看数据内容:
df1 #> col1 col2 #> 1 1 a #> 2 2 b #> 3 3 c #> 4 4 d #> 5 5 e #> 6 6 f #> 7 7 g df2 #> col1 col2 #> 1 1 a #> 2 2 c #> 3 3 f #> 4 4 g #> 5 10 z
1. 按col2匹配对齐数据框
使用merge()函数,通过all.x = TRUE保留df1的所有行,df2中无匹配的内容自动填充NA,之后调整列顺序与命名:
# 合并数据框,保留df1全部行 merged_df <- merge(df1, df2, by = "col2", all.x = TRUE) # 调整列顺序并重命名 merged_df <- merged_df[, c("col1.x", "col2", "col1.y", "col2.y")] colnames(merged_df) <- c("col1", "col2", "col1.1", "col2.1") # 查看结果 merged_df #> col1 col2 col1.1 col2.1 #> 1 1 a 1 a #> 2 2 b NA <NA> #> 3 3 c 2 c #> 4 4 d NA <NA> #> 5 5 e NA <NA> #> 6 6 f 3 f #> 7 7 g 4 g
2. 计算匹配百分比
用%in%判断df1的col2值是否存在于df2的col2中,再通过均值计算匹配占比:
# 计算匹配比例并转为百分比 match_percent <- mean(df1$col2 %in% df2$col2) * 100 # 输出结果(保留两位小数) cat("df1的col2列匹配占比:", round(match_percent, 2), "%\n") #> df1的col2列匹配占比: 57.14 %
内容的提问来源于stack exchange,提问作者Ophelia Hanson
相关产品推荐
相关产品推荐

