0

次のような 1005 個の変数を含む VarChange というデータ フレームがあります。

   row.name   SamplingEvent  Year  Zenaida_macroura  . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

私の目標は、データ フレームの列名を「NewSppName」(現在の変数名に相当する最大 8 文字のコード) という行に変更することです。これは、ArcMap のさまざまな変数の追跡を失わないようにするために必要です (これにより、すべての変数名が 8 文字に切り捨てられます)。

私が尋ねると、すべてがうまく見えます (つまり、R は適切な NewSppNames を出力します)。

Var['NewSppName',]

しかし、私が使用するとき:

colnames(VarChange) <- VarChange['NewSppName', ]

また

colnames(VarChange) <- as.character(VarChange["NewSppName",])

次の出力が得られます。

   row.names  7              Year  8            . . . 1005 variables
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr

変数の 95% は NewSppName の値に名前を変更しますが、NewSppName に存在するキャラクター名の代わりに数字に変更する変数が 12 ほどあります。

何か理由は?これに対する解決策はありますか?

4

1 に答える 1

0

インデックスを使用する場合は、論理名、数値、または行名のいずれかを使用する必要があります。「row.name」という名前の列があるからといって、それをインデックス作成に使用するよう R に指示することはありません。

VarChange <- read.table(text="   row.name   SamplingEvent  Year  Zenaida_macroura  
1  12367      S41            2005  0
2  12369      S42            2005  X
3  12370      S43            2005  4
4  OldSppName SamplingEvent  Year  Zenaida_macroura
5  NewSppName SampEvent      Year  Zenamacr
", header=TRUE)
> as.character(VarChange["NewSppName",])
[1] "NA" "NA" "NA" "NA"

したがって、代わりに「5」を使用するか、正しい論理ベクトルを作成してVarChange$row.names=="NewSppName"ください。ワークスペースに「NewSppName」という名前の異なるオブジェクトがいくつかあったため、おそらく異なる結果が得られました。また、 sapply()-ing によって安全に文字に変換する必要がありますas.character。これらはさまざまなレベルの要因であり、グローバルな as.character(.) は成功しないためです。

> sapply(VarChange[VarChange$row.name=="NewSppName",] ,as.character)
        row.name    SamplingEvent             Year Zenaida_macroura 
    "NewSppName"      "SampEvent"           "Year"       "Zenamacr" 

> colnames(VarChange) <- sapply(VarChange[5,] ,as.character)
> VarChange
  NewSppName     SampEvent Year         Zenamacr
1      12367           S41 2005                0
2      12369           S42 2005                X
3      12370           S43 2005                4
4 OldSppName SamplingEvent Year Zenaida_macroura
5 NewSppName     SampEvent Year         Zenamacr
于 2012-09-26T01:55:37.523 に答える