可以使用dplyr的mutate和ifelse函数来实现:

假设数据框名为df,有一列数据为value,需要按照每四行进行斜率计算,代码如下:

library(dplyr)

df <- df %>% 
  mutate(Slope = ifelse(row_number() %% 4 == 0, (value[4] - value[1]) / 30, NA)) %>% 
  mutate(Slope = ifelse(row_number() %% 4 == 3, (value[3] - value[1]) / 20, Slope)) %>% 
  mutate(Slope = ifelse(row_number() %% 4 == 2, (value[2] - value[1]) / 10, Slope)) %>% 
  mutate(Slope = ifelse(row_number() %% 4 == 1, NA, Slope)) %>% 
  fill(Slope, .direction = "down")

解释一下代码:

第一行使用mutate函数,ifelse函数和row_number函数来实现每四行取一次斜率计算。当行号(row_number)能被4整除时,即为第四行,计算斜率。如果不是第四行,则赋值为NA。

第二行使用mutate函数,ifelse函数和row_number函数来实现特殊情况下的斜率计算。当行号(row_number)除以4余数为3时,即为第三行,计算斜率。如果不是第三行,则不变。

第三行使用mutate函数,ifelse函数和row_number函数来实现特殊情况下的斜率计算。当行号(row_number)除以4余数为2时,即为第二行,计算斜率。如果不是第二行,则不变。

第四行使用mutate函数,ifelse函数和row_number函数来实现缺失值的处理。当行号(row_number)除以4余数为1时,即为第一行,赋值为NA。如果不是第一行,则不变。

第五行使用fill函数来填补缺失值,向下填补。这里的.fill是dplyr中的内部变量,表示填补方向。

最终,每四行进行一次斜率计算,如果遇到特殊情况,则计算三行斜率并在下一次计算时恢复四行计算。

R数据框有一列数据要求利用dplyr按照顺序每四行数值计算一个斜率Slope第四行数值减去第一行数值的差值与30的比值并追加到数据框如果达到指定位置为缺失值则变成三行数据计算斜率但这一次计算之后恢复四行计算 返回的结果追加到每次计算的第一行后面即第一行为空值也追加在空值后面

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

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