首页 > 解决方案 > 如何改变线条的斜率

问题描述

我有一个关于如何将线的斜率变为新数据框的问题

按类别。


d1 <-read.csv(file.choose(), header = T)
d2 <- d1 %>%
  group_by(ID)%>%
  mutate(Slope=sapply(split(df,df$ID), function(v) lm(x~y,v)$coefficients["y"]))

ID  x   y
1   3.429865279 2.431363764
1   3.595066124 2.681241237
1   3.735263469 2.352182518
1   3.316473584 2.51851394
1   3.285984642 2.380211242
1   3.860793029 2.62324929
1   3.397714117 2.819543936
1   3.452997088 2.176091259
1   3.718933278 2.556302501
1   3.518566578 2.537819095
1   3.689033452 2.40654018
1   3.349160923 2.113943352
1   3.658888644 2.556302501
1   3.251151343 2.342422681
1   3.911194909 2.439332694
1   3.432584505 2.079181246
1   4.031267043 2.681241237
1   3.168733129 1.544068044
1   4.032239897 3.084576278
1   3.663361648 2.255272505
1   3.582302046 2.62324929
1   3.606585565 2.079181246
1   3.541791347 2.176091259
4   3.844012861 2.892094603
4   3.608318477 2.767155866
4   3.588990218 2.883661435
4   3.607957917 2.653212514
4   3.306753044 2.079181246
4   4.002604841 2.880813592
4   3.195299837 2.079181246
4   3.512203238 2.643452676
4   3.66878494  2.431363764
4   3.598910385 2.511883361
4   3.721810134 2.819543936
4   3.352964661 2.113943352
4   4.008109343 3.084576278
4   3.584693332 2.556302501
4   4.019461819 3.084576278
4   3.359474563 2.079181246
4   3.950256012 2.829303773

我收到错误消息,例如“替换有 2 行,数据有 119”。我确信该错误来自 mutate()。

最好的,

标签: rdplyr

解决方案


执行 group_by 后,任何成功的函数都会在分组 data.frame 中的列上使用,在您的情况下,它只会使用其中的 x,y 列。

如果你只想要系数,它是这样的:

df %>% group_by(ID) %>% summarize(coef=lm(x~y)$coefficients["y"])
# A tibble: 2 x 2
     ID  coef
  <int> <dbl>
1     1 0.437
2     4 0.660

如果你想要系数,这意味着一个与数据帧一样长的向量,你可以使用 mutate:

df %>% group_by(ID) %>% mutate(coef=lm(x~y)$coefficients["y"])
# A tibble: 40 x 4
# Groups:   ID [2]
      ID     x     y  coef
   <int> <dbl> <dbl> <dbl>
 1     1  3.43  2.43 0.437
 2     1  3.60  2.68 0.437
 3     1  3.74  2.35 0.437
 4     1  3.32  2.52 0.437
 5     1  3.29  2.38 0.437
 6     1  3.86  2.62 0.437
 7     1  3.40  2.82 0.437
 8     1  3.45  2.18 0.437
 9     1  3.72  2.56 0.437
10     1  3.52  2.54 0.437
# … with 30 more rows

推荐阅读