Je veux regrouper mon Dataframe par Voici un échantillon de participant code> et appliquer itérativement une formule de modèle linéaire simple,
lm (résultat ~ a, données = myData) code>, de sorte que je finis à Avec un nouveau Dataframe séparé et séparé avec un coefficient pour chaque participant code>.
myData code>: p>
myCoefficients<- as.data.frame(mydata %>%
group_by(Participant) %>%
coef(lm(Outcome ~ A)))
3 Réponses :
Voici une solution utilisant sapply code>.
#find the slope and intercept
intercept<-sapply(unique(mydata$Participant), function(x){
lm(Outcome ~ A, data=mydata[mydata$Participant==x,])$coefficients[1]})
A_coefficient<-sapply(unique(mydata$Participant), function(x){
lm(Outcome ~ A, data=mydata[mydata$Participant==x,])$coefficients[2]})
#combine results into a dataframe
answer<-data.frame(Participant=unique(mydata$Participant), intercept, A_coefficient)
#slightly more compact coding:
fit<-sapply(unique(mydata$Participant), function(x){
lm(Outcome ~ A, data=mydata[mydata$Participant==x,])$coefficients})
answer<-cbind(Participant=unique(mydata$Participant), as.data.frame(t(fit)))
Essayez lmlist code>. Notez que le package NLME est déjà livré avec R.
(Intercept) A
1 8.122188 -0.079910741
2 2.111455 0.001547988
3 1.722062 0.304546146
4 -2.127148 0.164948454
5 -1.883623 0.076522166
6 2.463768 0.103024575
7 7.133361 -0.043622767
8 0.000000 0.000000000
9 1.370920 0.006923838
10 8.286374 0.081986143
11 -5.359477 0.283224401
12 -4.486884 0.143756558
13 -1.333333 0.034188034
14 0.000000 NA
Pour un Tidyverse code> Solution, il existe un cas d'utilisation similaire dans
? faire code>. Refaming Ceci pour l'exemple actuel:
library(tidyverse)
data %>%
group_by(Participant) %>%
do(mod = lm(Participant ~ A, data = .)) %>%
summarise(Participant = Participant,
coef = list(mod$coefficients)) %>%
unnest_wider(coef)
Vous pouvez utiliser
par (...) code> (lire la documentation) ou
split () code> plus
lapply () code>
Dans le
dplyr code> world,
group_map code> est ce que vous voulez.
Juste pour être clair, votre sortie souhaitée affiche une colonne de coefficient unique, mais le modèle
résultat ~ a code> conviendrait à la fois une interception et une pente. Voulez-vous les deux coefficients (ou tous les coefficients, si vous courez un modèle plus complexe)? Ou voulez-vous seulement, disons, le coefficient
A code>?
Je ne suis intéressé que par le coefficient
code> dès maintenant. Mais, comme la réponse acceptée ci-dessous prévoit, les deux pourraient potentiellement être utiles à l'avenir.