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

如何在R中创建新列,提取A列最后、B列首个非NA值填充?

在R中根据A列最后一个非NA值和B列第一个非NA值创建新列C

首先定义你的数据集:

A = c(5,1,NA,NA,NA)
B = c(NA,NA,10,11,13)
df <- data.frame(A, B)

需求说明

需要生成新列C:

  • 在A列最后一个非NA值所在行填入该值(即1,对应第2行)
  • 在B列第一个非NA值所在行填入该值(即10,对应第3行)
  • 其余位置填充NA
    最终C列结果为c(NA,1,10,NA,NA)

解决方案1:Base R 实现

直接通过索引定位目标行并赋值:

# 获取A列最后一个非NA值的行索引
last_A_idx <- max(which(!is.na(df$A)))
# 获取B列第一个非NA值的行索引
first_B_idx <- min(which(!is.na(df$B)))

# 初始化C列为NA,再给目标行赋值
df$C <- NA
df$C[last_A_idx] <- df$A[last_A_idx]
df$C[first_B_idx] <- df$B[first_B_idx]

验证结果:

df$C
# 输出结果:NA  1 10 NA NA

解决方案2:dplyr(Tidyverse)实现

适合习惯Tidyverse工作流的用户:

library(dplyr)

df <- df %>%
  mutate(
    # 标记目标行
    is_last_A = row_number() == max(which(!is.na(A))),
    is_first_B = row_number() == min(which(!is.na(B))),
    # 生成C列
    C = case_when(
      is_last_A ~ A,
      is_first_B ~ B,
      TRUE ~ NA_real_
    )
  ) %>%
  select(-is_last_A, -is_first_B) # 移除辅助列

执行后查看df$C即可得到预期结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:21