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

如何从现有列随机取值生成新列(保持宽表形式)

解决方案

可以实现这个需求,并且全程保持宽表结构,以下是基于dplyr包的代码实现:

步骤说明

  1. 按行处理数据,确保每一行的采样独立进行
  2. 提取每行中所有年龄列的非NA值
  3. 从非NA值中随机选取一个,作为新列的值

代码示例

library(dplyr)

# 定义原始数据
df <- tibble(
  individual = c("a", "b", "c", "d"),
  age_2010 = c(20, 33, 76, 46),
  age_2011 = c(21, 34, NA, 46),
  age_2012 = c(NA, 35, 78, 48),
  age_2013 = c(21, 36, 79, 49)
)

# 新增随机采样列并保持宽表
df_result <- df %>%
  rowwise() %>%
  mutate(
    `Random Sample` = sample(na.omit(c_across(starts_with("age_"))), size = 1)
  ) %>%
  ungroup()

# 输出结果
print(df_result)

代码解释

  • rowwise():将数据切换为按行处理模式,保证每行的采样操作独立
  • c_across(starts_with("age_")):提取当前行中所有以age_开头的列,合并为一个向量
  • na.omit():移除向量中的NA值,避免采样到缺失值
  • sample(..., size = 1):从清理后的向量中随机选取1个值作为新列内容

执行后会得到符合你需求的结果(由于随机性,每次采样的具体值可能不同,但逻辑完全匹配)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:45:37