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

如何按指定行对分组填充DataFrame中的NA值?

解决方案

方法一:修正分组逻辑后用group_by+fill(推荐)

你之前的问题出在分组依据不对,label是每个well单独的标识,没法把关联行对归到一组。我们可以先根据label里的数字生成分组ID,把关联行对分到同一组后再用fill填充NA:

library(dplyr)
# 如果不想额外加载stringr包,用substr提取数字
pbs_in_v2_cleaned <- pbs_in_v2 %>%
  # 生成分组ID:well_1&2为组1,well_3&4为组2,well_5&6为组3,well_7单独为组4
  mutate(group_id = (as.integer(substr(label, 6, nchar(label))) + 1) %/% 2) %>%
  # 按分组ID聚合,双向填充组内的NA值
  group_by(group_id) %>%
  fill(everything(), .direction = "downup") %>%
  ungroup() %>%
  # 可选:删除临时生成的分组列
  select(-group_id)

如果习惯用stringr提取数字,也可以把提取数字的部分换成:

mutate(group_id = (as.integer(stringr::str_extract(label, "\\d+")) + 1) %/% 2)

这样处理后,well_2的WT_group_4会被well_1的2670填充,well_5的WT_group_3会被well_4的2832填充,well_7保持原样不变。

方法二:用if_else手动指定填充规则(适合行对少的场景)

如果你的关联行对数量不多,也可以直接用if_else针对性替换NA:

pbs_in_v2_cleaned <- pbs_in_v2 %>%
  # 替换well_2的WT_group_4的NA
  mutate(WT_group_4 = if_else(label == "well_2" & is.na(WT_group_4), 
                              WT_group_4[label == "well_1"], 
                              WT_group_4)) %>%
  # 替换well_5的WT_group_3的NA
  mutate(WT_group_3 = if_else(label == "well_5" & is.na(WT_group_3), 
                              WT_group_3[label == "well_4"], 
                              WT_group_3))

这种方法需要逐个指定要替换的位置,行对多的时候效率较低,更推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:34