dataframe - 需要从第二行中减去作为每个 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)
解决方案
最简单的方法是执行以下操作:
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
,但我知道这是有保证的 - 对吧?
推荐阅读
- javascript - 我将如何根据左侧两列中的任何一列中是否存在值来向 Google 表格添加一个复选框?
- node.js - TypeORM 堆栈跟踪未在我的代码中显示错误来源
- r - 如何在 R chordDiagram 中为标签着色
- python - PyQt5:用户可以在其中绘制的绘图表面
- flutter - 如何根据字符串的相同值显示来自第二个 JSON 的数据
- javascript - 如何使用 Apple Mapkit 在 Web 查看器中使用 javascript 访问 filemaker 脚本?
- javascript - React Router 在同一页面上渲染目标页面
- prolog - 如何在 Prolog 中配对列表中的所有元素?
- linux - 防止 mkdir -p 覆盖目录和 cp 覆盖文件
- laravel - Laravel Websockets:无效的状态行