假设数据框名为df,包含一列数值数据column,可以使用如下代码实现要求:

library(dplyr)

# 定义计算斜率的函数
calc_slope <- function(x, y) {
  lm(y ~ x)$coefficients[2]
}

# 每四行计算斜率
df <- df %>%
  group_by(grp = ceiling(row_number() / 4)) %>%
  mutate(Slope = ifelse(n() == 4, calc_slope(1:4, column), NA_real_))

# 缺失值位置改为每三行计算
df <- df %>%
  ungroup() %>%
  mutate(grp = ceiling(row_number() / 3)) %>%
  group_by(grp) %>%
  mutate(Slope = ifelse(n() == 3, calc_slope(1:3, column), Slope)) %>%
  ungroup()

# 处理空值
df$Slope[is.na(df$Slope)] <- 0
df$Slope <- c(0, df$Slope[-nrow(df)])

首先定义了一个计算斜率的函数calc_slope,并利用dplyr的group_by和mutate函数按照每4行或3行分组计算斜率,并在每次计算的第一行后追加空值或上一次计算的结果。最后处理空值,将缺失的Slope值填充为0,并将每次计算的结果追加到第一行后面。


原文地址: https://www.cveoy.top/t/topic/Mea 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录