1. ホーム
  2. r

[解決済み] R - エラー "変数の長さが異なる"

2022-01-29 02:34:47

質問

> #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

データの行を削除することで問題が発生することは理解していますが、na.excludeで説明できるものと思っていました。徹底的に検索しても、なぜこのエラーが発生するのかが判断できません。

解決方法を教えてください。

これは、最初のステップで、データ・フレームの外側に別の変数を作成したために起こります。 transLOT<-log(LengthofTimemin) . データから行を削除すると transLOT は変更されません。長さの違いよりもさらに悪いのは、データがこれ以上並ばないことです。長さの違いを無視した場合、削除した行の後の応答と比較すると、データの行は "1つずれている" ことになります。

単純な解決策は transLOT という変数をデータフレーム内に作成します。そして、データに対して何か(行を削除するなど)するたびに、同じことが transLOT .

resdata$transLOT <- log(resdata$LengthofTimemin)

なお、私は resdata$LengthofTimemin よりも LengthofTimemin というのは、あなたのワークスペースにあるようです。あなたは attach() を、どこかで見たことがありませんか?を使うべきではありません。 attach というのは、まさにこの理由からです。変数はデータフレームの中に入れておきましょう