6

次のスクリプトを実行しています。

cause = c(1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2); 
time =  c(1, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2); 
table(cause, time)

そして、私は次のようになります:

    time
cause 1 2 3
    1 2 2 2
    2 2 3 0

私が欲しいのはこれです:

      time
cause     1 2 3
Maltreat  2 2 2
Non-Maltr 2 3 0

だから、私の質問は: R でテーブルの行の名前を変更するにはどうすればよいですか?

同様に、そのテーブルの列の名前をどのように変更しますか?

4

3 に答える 3

5

これを行うには、次の 2 つの簡単な方法があります。

z <- table(cause, time)

colnames/rownames 関数を使用します。

> colnames(z)
[1] "1" "2" "3"
> rownames(z)
[1] "1" "2"

または、dimname を使用します。

> dimnames(z)
$cause
[1] "1" "2"
$time
[1] "1" "2" "3"
> dimnames(z)$cause
[1] "1" "2"

いずれにせよ、名前をベクトルとして選択し、割り当てます。

> dimnames(z)$cause <- c("Maltreat","Non-malt")
> z
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0
于 2009-09-28T01:00:23.773 に答える
4

これを行う 1 つの方法は、インデックスの代わりに要素または文字列のリストを使用することです。そう:

cause1 <- c("Maltreat", "Non-malt")[cause]

> print(cause1)
 [1] "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Non-malt"
 [7] "Maltreat" "Non-malt" "Non-malt" "Non-malt" "Non-malt"

> table(cause1, time)
          time
cause1     1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

また、メモリや速度が心配な場合のために説明すると、R はこの種のものを内部で効率的に表現するのに非常に優れており、文字列全体の単一のインスタンスのみを格納し、残りはインデックスで処理します。

ちなみに、長期的には、データ フレームを使用したほうが幸せになれます。

> df <- data.frame(cause=as.factor(c("Maltreat", "Non-malt")[cause]), time=time)
> summary(df)
      cause        time      
 Maltreat:6   Min.   :1.000  
 Non-malt:5   1st Qu.:1.000  
              Median :2.000  
              Mean   :1.818  
              3rd Qu.:2.000  
              Max.   :3.000  
> table(df)
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0
于 2009-09-28T00:37:04.997 に答える