基于第三列值计算R中同一列两行差值(适用于Spotfire)
在Spotfire的R语言中计算相对于基线的Record差值
方法思路
按RecordId分组,提取每组基线(Visit = "Baseline")的Record值,再用每行的Record与基线值计算差值。根据你给出的示例,这里分两种常见计算逻辑:
- 逻辑1:当前值 - 基线值(保留正负,如筛查24-20=4,访视5为15-20=-5)
- 逻辑2:基线值与当前值的差值绝对值(如示例中访视5得到5)
具体代码
假设你的数据集在Spotfire中对应的R数据框名为df,可使用dplyr包实现(Spotfire默认支持此包):
逻辑1:计算带正负的差值
library(dplyr) # 分组计算差值 df <- df %>% group_by(RecordId) %>% mutate(`Change in Record from Baseline` = Record - first(Record[Visit == "Baseline"])) %>% ungroup() # 将基线行的差值设为空,匹配示例格式 df <- df %>% mutate(`Change in Record from Baseline` = ifelse(Visit == "Baseline", NA, `Change in Record from Baseline`))
逻辑2:计算差值的绝对值
library(dplyr) # 分组计算绝对值差值 df <- df %>% group_by(RecordId) %>% mutate(`Change in Record from Baseline` = abs(first(Record[Visit == "Baseline"]) - Record)) %>% ungroup() # 将基线行的差值设为空,匹配示例格式 df <- df %>% mutate(`Change in Record from Baseline` = ifelse(Visit == "Baseline", NA, `Change in Record from Baseline`))
补充说明
first(Record[Visit == "Baseline"])用于精准提取每组中唯一的基线Record值,避免重复计算- 在Spotfire中,你可以将这段代码作为数据函数运行,或在支持R表达式的计算列中直接调用
内容的提问来源于stack exchange,提问作者Niti
相关产品推荐
相关产品推荐

