R语言管道过滤行后计算最大最小体重差值的实现问题
问题解决:计算特定ID体重差值的管道代码修正
错误原因
你写的代码里,pull(WeightKg)会把筛选后的数据转换成单一数值向量,之后调用max(WeightKg)和min(WeightKg)时,R找不到WeightKg这个对象——因为管道传递的是向量本身,不是带列名的数据框,所以报错“object 'WeightKg' not found”。
正确写法(三种管道实现方式)
方式1:在数据框中汇总计算后提取结果
weightLogInfo_merged %>% filter(Id == 6962181067) %>% summarise(weight_diff = max(WeightKg) - min(WeightKg)) %>% pull(weight_diff)
先筛选目标ID的数据,用summarise直接计算体重差值,最后用pull提取结果。
方式2:利用管道占位符处理向量
weightLogInfo_merged %>% filter(Id == 6962181067) %>% pull(WeightKg) %>% {max(.) - min(.)}
用大括号包裹计算逻辑,.代表管道传递过来的体重向量,直接对向量取最大最小值做差。
方式3:用range+diff简化计算
weightLogInfo_merged %>% filter(Id == 6962181067) %>% pull(WeightKg) %>% range() %>% diff()
range()会返回向量的最小值和最大值组成的向量,diff()直接计算两者的差值,代码更简洁。
内容的提问来源于stack exchange,提问作者Jexi
相关产品推荐
相关产品推荐

