R数据框有一列数据要求利用dplyr按照顺序每四行数值计算一个斜率Slope并追加到数据框如果达到指定位置为缺失值则变成三行数据计算斜率但这一次计算之后恢复四行计算 返回的结果追加到每次计算的第一行后面即第一行为空值也追加在空值后面
假设数据框名为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 著作权归作者所有。请勿转载和采集!