2012-08-04 7 views
26

baseパッケージのreplace機能のヘルプページは、非常にとなります。と表示されません。最悪の部分は、どのように動作するかを理解するのに役立つ例はありません。機能の例を置き換えます

使用方法を教えてください。 1つまたは2つの例が素晴らしいでしょう。

答えて

30

あなたはそれが?"["で説明されて[<-機能の単純な官能化されたバージョンであることがわかります(それはコンソールで名前だと入力して)機能を見ればです。 [は、Rのやや基本的な機能なので、詳細についてはそのページを見ることをお勧めします。インデックス引数は(replaceで2番目の引数が論理的、数値または文字分類値であることを学んでいる。特に重要なリサイクルは2番目と3番目の引数の異なる長さがある場合に発生します。ため

> replace(1:20, 10:15, 1:2) 
[1] 1 2 3 4 5 6 7 8 9 1 2 1 2 1 2 16 17 18 19 20 

文字インデックスが

> replace(c(a=1, b=2, c=3, d=4), "b", 10) 
a b c d 
1 10 3 4 

論理インデックス:ベクトルという名前

> replace(x <- c(a=1, b=2, c=3, d=4), x>2, 10) 
a b c d 
1 2 10 10 
8

はここで2つの簡単な例を

> x <- letters[1:4] 
> replace(x, 3, 'Z') #replacing 'c' by 'Z' 
[1] "a" "b" "Z" "d" 
> 
> y <- 1:10 
> replace(y, c(4,5), c(20,30)) # replacing 4th and 5th elements by 20 and 30 
[1] 1 2 3 20 30 6 7 8 9 10 
11

また、論理的なテストを使用することができます

x <- data.frame(a = c(0,1,2,NA), b = c(0,NA,1,2), c = c(NA, 0, 1, 2)) 
x 
x$a <- replace(x$a, is.na(x$a), 0) 
x 
x$b <- replace(x$b, x$b==2, 333) 
1

上記の例の3番目のパラメータ(値)は次のとおりであることに注意してください。 'Z'またはc(20,30))。

データフレーム自体の値を使用して3番目のパラメータを定義すると、混乱する可能性があります。

など。このような単純なデータフレームと(dplyr :: DATA_FRAMEを使用して):今、あなたが望んでいた場合を考えてみ

 a  b 
    (int) (chr) 
1  1  X 
2  2  Y 
3  3  Y 
4  4  X 
5  5  Z 

..etc

tmp <- data_frame(a=1:10, b=sample(LETTERS[24:26], 10, replace=T)) 

これは、このような気にいらを作成します。列 'a'の値に2を掛けることでしたが、列 'b'は 'X'だけです。私の考えは次のようなものになります。

with(tmp, replace(a, b=="X", a*2)) 

しかし、これは望ましい結果をもたらさないでしょう。 a * 2は 'a'列への参照ではなく、固定されたベクトルとして定義されます。したがって、ベクトル 'a * 2'は、 'replace'操作の開始時に

[1] 2 4 6 8 10 12 14 16 18 20 

になります。したがって、 'b'が「X」に等しい最初の行では 'a'の値は2で置き換えられます。2回目は4などに置き換えられます.2回置き換えられませんその特定の行のaの価値。

関連する問題