R中按行顺序对齐全量与子集数据框并填充NA的方法
解决方案
因为你已经明确两个表按相同全局顺序排序,仅子集表缺少无额外字段的观测行,我们可以通过双指针按顺序匹配的方式实现对齐,完全规避多键匹配的问题:
通用实现(兼容Base R和Tidyverse环境)
# 初始化指针和结果列 i <- j <- 1 n_ref <- nrow(fruit_sizes) n_sub <- nrow(fruit_prices) price_vec <- rep(NA_real_, n_ref) # 按顺序匹配 while (i <= n_ref && j <= n_sub) { if (fruit_sizes$fruit[i] == fruit_prices$fruit[j]) { price_vec[i] <- fruit_prices$price[j] j <- j + 1 } i <- i + 1 } # 合并到参考表 fruit_sizes$price <- price_vec
运行后得到的fruit_sizes就是你需要的结果:
# A tibble: 6 × 4 fruit colour size price <chr> <chr> <dbl> <dbl> 1 apple red 5 1.5 2 cherry red 2 NA 3 strawberry red 3 0.2 4 apple green 6 NA 5 lime green 4 2 6 apple yellow 5 1.3
简化方案(已知匹配行索引时使用)
如果后续场景中你可以直接拿到参考表中需要匹配的行的索引(比如示例中对应索引为c(1,3,5,6)),可以直接赋值,效率更高:
match_idx <- c(1,3,5,6) fruit_sizes$price[match_idx] <- fruit_prices$price
内容的提问来源于stack exchange,提问作者shizundeiku
相关产品推荐
相关产品推荐

