如何在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
相关产品推荐
相关产品推荐

