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

R语言求助:使用apply系列函数用另一DataFrame填充缺失值

Hey there!作为R新手能想着用apply家族优化代码,已经比很多刚入门的人思路超前啦~其实你这个需求用向量化操作就能搞定,比循环和apply都简洁高效,先给你最直接的方案:

方案1:基础向量索引(最推荐)

假设Records和Results是行数一致的数据框,直接通过布尔索引替换NA值就行:

# 找到Records$time中NA的位置,用Results对应位置的time填充
Records$time[is.na(Records$time)] <- Results$time[is.na(Records$time)]

R是向量型语言,这种操作底层已经优化过,比循环快得多,代码也一目了然。

方案2:用mapply实现(如果你执着于apply家族)

你之前试mapply出错可能是没匹配好两个向量的元素。mapply适合处理多输入的逐元素操作,这里我们给它传两个向量(Records的time和Results的time),然后对每个位置的元素判断:

Records$time <- mapply(function(record_time, result_time) {
  if (is.na(record_time)) {
    result_time
  } else {
    record_time
  }
}, Records$time, Results$time)

不过说实话,这个写法不如向量索引简洁,只是满足你想用apply家族的需求~

为什么apply/lapply没成功?

  • apply是针对矩阵/数据框的行或列做批量操作,不是逐元素处理两个向量的对应位置,所以用它会跑偏;
  • lapply是对列表的单个元素循环,你这里需要同时处理两个向量的对应元素,所以lapply也不适用。

额外推荐:tidyverse风格写法(更易读)

如果之后经常处理数据框,推荐学一下dplyr包,代码可读性拉满:

library(dplyr)

Records <- Records %>%
  mutate(time = if_else(is.na(time), Results$time, time))

不用纠结apply啦,R里很多时候向量化操作才是最优解~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:48:21