2012-08-04 36 views
26

我沒有找到replace功能的幫助頁面,從base包到非常有幫助。最糟糕的是,它沒有任何可以幫助理解它如何工作的例子。替換函數示例

您能否解釋一下如何使用它?一個或兩個例子會很棒。

回答

30

如果你看一下功能(通過鍵入在控制檯上的名字),你會看到,它只是[<-功能的一個簡單的功能化版本,它在?"["描述。 [對R來說是一個相當基本的功能,因此建議您查看該頁面以獲取更多詳細信息。尤其重要的是學習,該指數參數(在replace第二參數可以是邏輯的,數字或字符歸類值當存在的第二和第三個參數不同的長度回收將發生:

> 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

這裏有兩個簡單的例子

> 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

請注意,上面給出的示例中的第三個參數(值):該值是一個常數(例如, 'Z'或c(20,30))。

使用數據框本身的值定義第三個參數可能會導致混淆。

E.g.用一個簡單的數據幀像這樣(使用dplyr :: data_frame):

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

這將這樣的財產以後創建:

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

...等

現在,假設你要想要做,是將列「a」中的值乘以2,但只有列「b」是「X」。我的直接想法是這樣的:

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

但是,這不會提供所需的結果。 a * 2將被定義爲固定向量而不是對'a'列的引用。因此,在'替換'操作開始時,向量'a * 2'將因此變爲

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

。因此,第一行'b'等於「X」,'a'中的值將被放置2.第二次,它將被替換爲4等等......它不會被兩次取代在特定行中的a值。