1. ホーム
  2. r

[解決済み] 無効な '行.名' の長さ

2022-02-11 12:37:28

質問

TraMineR(バージョン1.8.4)のseqdef-funcitonを使ってシーケンスオブジェクトを定義しようとしているのですが、いつもこんな意味のわからないエラーメッセージが表示されます。 Error in row.names<-.data.frame ( *tmp* , value = value) : 無効な'row.names'の長さ

私のコード入力は

sample.sts <- seqdef(sample, var=c("jan2005", "feb2005", "mar2005", "apr2005", "may2005", 
"jun2005", "jul2005", "aug2005", "sep2005", "oct2005", "nov2005", "dec2005"),  
alphabet=c("Employee (full-time)", "Employee (part-time)", 
"Self-employed (full-time)", "Self-employed (part-time)", "unemployed", "Retired", 
"Student", "Other inactive", "Compulsory military service"), 
states=c("EF", "EP", "SF", "SP", "UE", "RE", "ST", "IA", "MS"), id="pidc")

データフレーム "sample"は次のようになります。

    pidc           jan2005   feb2005    ...    dec2005   sex   edufirst   age05   
--------------------------------------------------------------------------    
1.  150163920001         .         .    ...         .    1          5      62   
2.  211518110003         .         .    ...         .    2          2      17   
3.  170295160002         .         .    ...         .    2          1      47   
4.  240386550002         2         2    ...         2    2          2      50   
5.  320099920001         .         .    ...         .    1          3      38   
--------------------------------------------------------------------------    
6.  200167850001         .         .    ...         .    1          5      39  
7.  340401190002         6         6    ...         6    1          3      61  
8.  180501260002         .         .    ...         .    1          3      29  
9.  230083560001         .         .    ...         .    1          3      61  
10. 240335270002         3         3    ...         3    2          3      30  

というのが全体の出力です。

[州コードに '-' 文字を発見、推奨されません。
[シーケンスデータに欠損値('NA')があることが判明しました。
[3266配列の準備
[>] void要素を'%'で、欠損値を'*'でコーディングする。
[!] インデックス付きシーケンス。1,2,3,...
[>] 状態コーディング。
[アルファベット] [ラベル] [ロングラベル]
1 従業員(正社員) EF EF
2 従業員(パートタイム) EP EP
3 自営業者(常勤) SF SF
4 自営業(パートタイム) SP SP
5 無職 UE UE
6 退職者 RE RE
7 学生 ST ST
8 その他活動休止中 IA IA
9 強制的な兵役 MS MS
[>] データセットに含まれる3266個の配列
[最小/最大配列長:12/12
の不具合 row.names<-.data.frame ( *tmp* , value = value) :
無効な'row.names'の長さ

状態を"-"なしで再ラベル化してから再試行しましたが、エラーには影響しません。多分、誰かが私を助けることができ、このエラーの原因を知っていますか?

解決方法は?

seqdefの引数quot;id"は、1つの配列につき1つのエントリを含むベクトルでなければなりません(つまり、idベクトルの長さは配列数と同じでなければなりません)。id=as.character(sample$pid)を使ってみてください。id=sample$pid (as.character なし) を使ってみてください。

sample.sts <- seqdef(sample, var=c("jan2005", "feb2005", "mar2005", "apr2005", "may2005", "jun2005", "jul2005", "aug2005", "sep2005", "oct2005", "nov2005", "dec2005", "jan2006", "feb2006", "mar2006", "apr2006", "may2006",  "jun2006", "jul2006", "aug2006", "sep2006", "oct2006", "nov2006", "dec2006",  "jan2007", "feb2007", "mar2007", "apr2007", "may2007",  "jun2007", "jul2007", "aug2007", "sep2007", "oct2007", "nov2007", "dec2007", "jan2008", "feb2008", "mar2008", "apr2008", "may2008", "jun2008", "jul2008", "aug2008", "sep2008", "oct2008", "nov2008", "dec2008"),  alphabet=c("Employee (full-time)", "Employee (part-time)", "Self-employed (full-time)", "Self-employed (part-time)", "unemployed", "Retired", "Student", "Other inactive", "Compulsory military service"), states=c("EF", "EP", "SF", "SP", "UE", "RE", "ST", "IA", "MS"), d=as.character(sample$pid))

データ中の状態と引数のアルファベットとの間にミスマッチがあるようです("-" が "." に置き換えられたため)。alphabet引数を変更する必要があります(seqstatl関数を使って、データにどのstatesラベルが存在するかを調べてみてください)。