R - erreur “variable longueurs diffèrent”
> #transforming length of time
> transLOT<-log(LengthofTimemin)
>
> #checking for outliers
> fit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, data=resdata)
> outlierTest(fit)
rstudent unadjusted p-value Bonferonni p
295 4.445284 1.1025e-05 0.0052808
>
> #getting rid of the outlier data in row 295
> rdata<-resdata[-295, ]
> print(rdata[294:296,5:10])
# A tibble: 3 × 6
DepartureDate DepartureTime LengthofTime LengthofTimemin EventLengthCategories
<dttm> <dttm> <dttm> <dbl> <chr>
1 2016-09-19 1899-12-30 23:46:46 1899-12-30 00:05:49 5.816667 5-15
2 2016-09-20 1899-12-30 01:55:28 1899-12-30 00:01:20 1.333333 <5
3 2016-09-20 1899-12-30 04:07:28 1899-12-30 00:01:21 1.350000 <5
> newfit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, na.action=na.exclude, data=rdata)
Error in model.frame.default(formula = transLOT ~ DielEnd + TideEnd + :
variable lengths differ (found for 'DielEnd')
> #now all of a sudden the variable lengths differ
Je comprends que le problème se produit avec la suppression de la ligne de données, mais je suppose que na.exclure compte pour elle. Après avoir bien chercher, je n'arrive pas à déterminer pourquoi cette erreur se produit.
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que dans votre première étape que vous avez créé une variable séparée à l'extérieur de votre bloc de données,
transLOT<-log(LengthofTimemin)
. Lorsque vous supprimez une ligne de données,transLOT
est inchangé. Même pire que de longueurs différentes, vos données ne sont pas alignés tout plus - si les différentes longueurs ont été ignorés, vos lignes de données serait "par un" par rapport à la réponse après la ligne que vous avez retiré.La solution la plus simple est de créer votre
transLOT
variable dans le bloc de données. Ensuite, chaque fois que vous faire des choses pour les données (comme supprimer des lignes), la même chose est faite pourtransLOT
.Noter que j'ai aussi utiliser le
resdata$LengthofTimemin
plutôt queLengthofTimemin
que vous semblez avoir dans votre espace de travail. Avez-vous utiliséattach()
à un certain point? Vous ne devriez pas utiliserattach
exactement pour cette raison. Garder les variables dans le bloc de données!dplyr
déjà (au moins votrerdata
est un tibble), de sortemutate
est une belle alternative à la fois de maintenir les données dans votre bloc de données et vous évite d'avoir à re-saisir le nom de la trame de données des centaines de fois.