Как мутировать наклоны линий - PullRequest
1 голос
/ 27 апреля 2020

У меня есть вопрос о том, как преобразовать наклоны линий в новый фрейм данных в

по категориям.


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 ().

Лучший,

1 Ответ

0 голосов
/ 27 апреля 2020

Как только вы выполните 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...