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

R语言如何为数据框隔行取值新增列并封装可复用函数

R实现隔行拆分列可复用方案

核心需求

  • 输入为包含A、B两列的数据表
  • 新增X列:仅保留A列奇数行(第1、3、5……位)的数值,其余位置填充NA
  • 新增Y列:仅保留A列偶数行(第2、4、6……位)的数值,其余位置填充NA
  • 逻辑封装为通用函数,替代原有Excel手动操作,可直接复用处理同类数据

示例输入数据

input_df <- structure(list(A = c(2L, 7L, 5L, 11L, 54L, 12L, 34L, 14L, 10L, 
6L), B = c(3L, 5L, 1L, 21L, 67L, 32L, 19L, 24L, 44L, 37L)), class = "data.frame", row.names = c(NA, 
-10L))

期望输出结果

structure(list(A = c(2L, 7L, 5L, 11L, 54L, 12L, 34L, 14L, 10L, 
6L), B = c(3L, 5L, 1L, 21L, 67L, 32L, 19L, 24L, 44L, 37L), X = c(2L, 
NA, 5L, NA, 54L, NA, 34L, NA, 10L, NA), Y = c(NA, 7L, NA, 11L, 
NA, 12L, NA, 14L, NA, 6L)), class = "data.frame", row.names = c(NA, 
-10L))

实现函数

通过行号步长直接定位奇偶位置赋值,函数支持自定义源列名和生成的新列名,适配不同数据场景:

split_alternate <- function(df, source = "A", col_odd = "X", col_even = "Y") {
  # 复制原数据,避免直接修改输入对象
  output <- df
  rcount <- nrow(output)
  # 填充奇数位置列
  output[[col_odd]] <- NA
  odd_rows <- seq(1, rcount, by = 2)
  output[[col_odd]][odd_rows] <- output[[source]][odd_rows]
  # 填充偶数位置列
  output[[col_even]] <- NA
  even_rows <- seq(2, rcount, by = 2)
  output[[col_even]][even_rows] <- output[[source]][even_rows]

  return(output)
}

调用测试

# 传入示例数据运行
test_result <- split_alternate(input_df)
# 打印结果验证
print(test_result)

运行后输出结果和预期完全匹配,处理任意行数的同类数据时直接传入对应数据框即可,无需修改内部逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:15:31