如何在R中添加“斜率”函数(excel)

问题描述 投票:0回答:1

我正在尝试将数据整理从 Excel 转移到 R。 我有一个包含 62 列和 21 行的数据框 (df)。每一行代表一个不同的组织,每个列标题(除了给出组织名称的第一个标题)都是每月日期。

结构如下:

structure(list(OrgCode = c("RA", "RB", "RC", "RD"), Provider = c("ORGA", 
"ORGB", "ORGC", 
"ORGD"), `Jan-22` = c(0.54, 
0.78, 0.715399610136452, 0.37), `Feb-22` = c(0.14, 
0.43, 0.65, 0.87)), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame"))

我的Excel电子表格使用slope()函数获取最近的3个日期并计算它们的斜率。我想在 R 中的 df 中创建一个新列,其中包含 df 最后 3 列的斜率,但我不知道如何执行此操作。

我看到一些代码建议对每个提供商进行线性回归:

mod <- lm(y ~ x)
cf <- coef(mod)
Slope <- cf[2]

但我不知道如何在列中保存模型(仅使用最后三个日期,而不是数据框中可用的所有日期),然后创建另一个采用该日期的列 - 似乎应该有一个存在简单的函数。

非常感谢任何帮助。

r excel lm
1个回答
0
投票

一种懒惰的方法..

slope
函数需要最后3列 - 您必须确保这是最后日期的正确列。

df <- structure(
  list(
    OrgCode = c("RA", "RB", "RC", "RD"),
    Provider = c("ORGA", "ORGB", "ORGC", "ORGD"),
    `Jan-22` = c(0.54, 0.78, 0.715399610136452, 0.37),
    `Feb-22` = c(0.14, 0.43, 0.65, 0.87),
    `Mar-22` = c(0.54, 0.78, 0.715399610136452, 0.37),
    `Apr-22` = c(0.84, 1.43, 0.9, 0.07)
  ),
  row.names = c(NA, -4L),
  class = c("tbl_df", "tbl", "data.frame")
)

slope <- function(df = "", row_number = 1L) {
  df <- df[,c((ncol(df)-2):ncol(df))]
  sl <- lm(c(df[row_number, 1][[1]], df[row_number, 2][[1]], df[row_number, 3][[1]]) ~ c(1, 2, 3)) |>
    coef() |>
    purrr::pluck(2)
  return(sl)
}

slope(df, 1)
#> [1] 0.35

slope(df, 3)
#> [1] 0.125

sla <- list()
for (i in 1:nrow(df)) {
  sla <- slope(df, i) |>
    rbind(sla)
}
df$slope <- rev(unlist(sla))
df
#>   OrgCode Provider    Jan-22 Feb-22    Mar-22 Apr-22  slope
#> 1      RA     ORGA 0.5400000   0.14 0.5400000   0.84  0.350
#> 2      RB     ORGB 0.7800000   0.43 0.7800000   1.43  0.500
#> 3      RC     ORGC 0.7153996   0.65 0.7153996   0.90  0.125
#> 4      RD     ORGD 0.3700000   0.87 0.3700000   0.07 -0.400

创建于 2024-02-29,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.