如何在R中创建序列达峰后始终保留最大值的新变量?
问题原因
你原有代码的问题在于错误地将日期列sampling_date与which.max()返回的行索引直接比较,R的隐式类型转换会导致判断逻辑完全失效,才会出现所有值都被替换为全局最大值的问题。
解决方案
你需要先定位首次出现最大值的行位置,再通过行号判断是否需要替换值即可,对应实现代码如下:
library(dplyr) data.1.new.version <- data.1 %>% mutate( # 判断当前行是否在首次最大值行之后(包含首次最大值行) value2 = if_else(row_number() >= which.max(value), max(value), value) )
运行后生成的value2列和你示例中data.2的value2完全一致。
如果后续你需要处理多组样本的批量计算,可使用分组逻辑实现:
# 假设数据中sample_id列为样本分组标识 data.1.grouped <- data.1 %>% group_by(sample_id) %>% mutate( value2 = if_else(row_number() >= which.max(value), max(value), value) ) %>% ungroup()
内容的提问来源于stack exchange,提问作者Giuseppe Petri
相关产品推荐
相关产品推荐

