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

R语言如何按条件将浓度向量自动填充赋值到数据框

R语言按条件分组填充固定序列值实现方案

需求说明

初始数据框结构参考:
start dataframe
预定义浓度序列如下:

concentration <- c(0.0001, 0.001, 0.01, 0.1, 1, 10)

需要实现逻辑:数据框中same字段取值为no时,对应药物的记录行按从上到下顺序依次填充上述浓度向量的值,最终效果参考:
end result


实现代码

方法1:dplyr 写法(代码简洁易读)

如果已经安装tidyverse/dplyr包可以直接用这个方法,大样本下处理效率更高:

library(dplyr)

# 处理逻辑:按药物分组,给same=no的行按顺序匹配浓度值
df_result <- df %>%
  group_by(drug) %>%
  mutate(
    conc = case_when(
      same == "no" ~ concentration[1:n()],
      # 如果same=yes的行需要保留原有浓度值,把下面的NA换成你原数据的浓度列名即可
      TRUE ~ NA_real_
    )
  ) %>%
  ungroup()

注意如果你的浓度列本身就叫concentration,建议把预定义的浓度向量改名为conc_seq,避免和数据框列名重名导致逻辑错误。

方法2:基础R写法(无需安装第三方包)

不想额外装依赖包可以直接用原生R实现:

# 初始化浓度列
df$conc <- NA

# 遍历每个药物分组填充
for (current_drug in unique(df$drug)) {
  # 定位当前药物下same为no的行位置
  row_index <- which(df$drug == current_drug & df$same == "no")
  # 按顺序填充浓度序列
  df$conc[row_index] <- concentration[seq_along(row_index)]
}

注意事项

  • 代码里的drug/same/conc是示例字段名,替换成你自己数据框里的实际列名即可运行
  • 确保每个药物分组下same == "no"的行数和concentration向量长度一致,否则会出现长度不匹配警告,和示例结构一致时无该问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:31:14