首页 > 解决方案 > 需要从第二行中减去作为每个 ID 的基线值

问题描述

我需要conc从每个 ID 的基线值中减去每个。我不能从每个的第一行减去,ID因为它有一个剂量信息。我需要req_conc列中的值。基线值位于每个 ID 的行 [2] 中。

数据框

│ Row │ id    │ time  │ conc    │ req_conc │
│     │ Int64 │ Int64 │ Int64?  │ Int64?   │
├─────┼───────┼───────┼─────────┼──────────┤
│ 1   │ 1     │ 0     │ missing │ missing  │
│ 2   │ 1     │ 0     │ 32      │ 0        │
│ 3   │ 1     │ 1     │ 45      │ 13       │
│ 4   │ 1     │ 2     │ 36      │ 4        │
│ 5   │ 1     │ 3     │ 32      │ 0        │
│ 6   │ 2     │ 0     │ missing │ missing  │
│ 7   │ 2     │ 0     │ 40      │ 0        │
│ 8   │ 2     │ 1     │ 62      │ 22       │
│ 9   │ 2     │ 2     │ 53      │ 13       │
│ 10  │ 2     │ 3     │ 48      │ 8        │

数据

id = [1,1,1,1,1,2,2,2,2,2]
time = [0,0,1,2,3,0,0,1,2,3]
conc = [missing, 32, 45, 36, 32, missing, 40, 62, 53, 48]
req_conc = [missing, 0, 13, 4, 0, missing, 0, 22, 13, 8]

df = DataFrame(id=id, time=time, conc=conc, req_conc=req_conc)

标签: dataframejulia

解决方案


最简单的方法是执行以下操作:

julia> transform(groupby(df, :id), :conc => (x -> x .- x[2]) => :req_conc2)
10×5 DataFrame
 Row │ id     time   conc     req_conc  req_conc2
     │ Int64  Int64  Int64?   Int64?    Int64?
─────┼────────────────────────────────────────────
   1 │     1      0  missing   missing    missing
   2 │     1      0       32         0          0
   3 │     1      1       45        13         13
   4 │     1      2       36         4          4
   5 │     1      3       32         0          0
   6 │     2      0  missing   missing    missing
   7 │     2      0       40         0          0
   8 │     2      1       62        22         22
   9 │     2      2       53        13         13
  10 │     2      3       48         8          8

我利用了这样一个事实,即在第一行中我们拥有missing并从中减去任何东西都会missing产生缺失值。

这假设您的数据框按:id和按 排序:time,但我知道这是有保证的 - 对吧?


推荐阅读