R语言嵌套if/ifelse语句语法问题及pHDelta计算需求
R语言计算pHDelta字段的解决方案
方法1:用dplyr包(推荐)
不用嵌套if/else,通过分组匹配就能轻松实现,步骤如下:
- 先安装并加载dplyr包(如果没装过):
install.packages("dplyr") library(dplyr)
- 处理数据(假设你的数据框名为
df):
df <- df %>% group_by(日期, 位置) %>% # 仅对A、B编码计算差值,F编码留空 mutate(pHDelta = ifelse(编码 %in% c("A", "B"), pH值 - pH值[编码 == "F"], NA)) %>% ungroup()
方法2:基础R原生实现
不想用第三方包的话,用ave函数分组处理:
df$pHDelta <- ave(df$pH值, df$日期, df$位置, FUN = function(x, code) { f_pH <- x[code == "F"] ifelse(code %in% c("A", "B"), x - f_pH, NA) }, code = df$编码)
效果说明
两种方法都会按日期+位置分组,自动找到每组里编码为F的pH值,然后给A、B编码的行计算pH值 - F的pH值,F编码的行pHDelta保持NA(需要的话可以自己修改逻辑)
内容的提问来源于stack exchange,提问作者Paul Wild
相关产品推荐
相关产品推荐

