查找 R 中特定行的回归和回归线的斜率

finding regression and slope of the regression line for specific rows in R

我正在处理一个具有纵向测量值的大型数据集。为了简化我在这里的工作是一个例子。可以说,一项研究测量了一段时间内特定城市的降雨量。下面是一个导入到 R 中的示例数据集。请注意,一些城市没有其他城市那么多的测量值,而且数据有点到处都是。这些城市的数据采集年份并不完全相同,所以我们可以把它们当作观测值来计算。

这是 R 中数据的样子

        City          Time.point          Total.rain
        City1            1                    0.50
        City1            2                    0.70
        City1            3                    0.60
        City1            4                    0.40
        City1            5                    0.60
        City1            6                    0.20
        City2            1                    1.00
        City2            2                    0.80
        City2            3                    0.50
        City2            4                    0.80
        City3            1                    1.00
        City3            2                    1.20
        City3            3                    1.20
        City4            1                    0.30
        City4            2                    0.20
        City4            3                    0.30
        City4            4                    0.50
        City4            5                    0.10
        City4            6                    0.01
        City4            7                    0.02
        City5            1                    0.10
        City5            2                    0.15
        City5            3                    0.30
        City5            4                    0.30
        City5            5                    0.25
        City5            6                    0.30

我如何找到每个城市的回归,即最佳拟合线的斜率? 我不想比较城市。只需为每个城市找到这些数据,然后为每个城市创建一个包含单个点的新数据集。类似于下面的东西(如果我手工正确地做的话)。

       City            Regression.slope
       City1             -0.05714286
       City2             -0.09000000
       City3              0.10000000
       City4             -0.05071429
       City5              0.03714286

非常感谢任何帮助。

我想这会让你到达那里。仔细检查 City5 上的计算。 :-)

library(dplyr)
library(purrr)

#nest each city into a data frame
df_City <- df %>%
    group_by(City) %>%
    nest()
    
#set up the regression model
model <- function(df) {
    lm(Total.rain ~ Time.point, data = df)
}

#add model as another column in the data frame
data_City <- df_City %>%
    mutate(model = purrr::map(data, model))

#extract the results using the broom package into separate columns
data_all <- data_City %>% 
    mutate(results = purrr::map(model, broom::tidy)) %>% 
    unnest(results, .drop = TRUE)

#filter/select for the sought after values
data_all %>%
    filter(term == "Time.point") %>%
    select(City, estimate)


City  estimate
  <chr>    <dbl>
1 City1  -0.0571
2 City2  -0.0900
3 City3   0.100 
4 City4  -0.0507
5 City5   0.0414

我认为这可以在一行代码中大大简化

整洁宇宙

dat %>% group_by(City) %>% summarize(est = lm(Total.rain~Time.point)$coef[2])

data.table

dat[, .(est = lm(Total.rain~Time.point)$coef[2]), by=.(City)]

输出:

     City         est
   <char>       <num>
1:  City1 -0.05714286
2:  City2 -0.09000000
3:  City3  0.10000000
4:  City4 -0.05071429
5:  City5  0.03714286