“替换”功能示例

时间:2012-08-04 18:23:13

标签: r

我找不到replace包中base函数的帮助页面非常有帮助。最糟糕的是,它没有任何可以帮助理解其工作原理的例子。

请您解释一下如何使用它?一两个例子会很棒。

5 个答案:

答案 0 :(得分:35)

如果你看一下这个功能(通过在控制台输入它的名字),你会发现它只是[<-函数的简单功能化版本,在?"["中有所描述。 。 [是R的一个相当基本的功能,因此建议您查看该页面以获取更多详细信息。特别重要的是学习索引参数(replace中的第二个参数可以是逻辑,数字或字符分类的值。当第二个和第三个参数的长度不同时,将发生回收:

你应该&#34;阅读&#34;函数调用为&#34; &#34;在第一个参数中,使用第二个参数作为索引,将第三个参数的值放入第一个参数&#34;:

> 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 

答案 1 :(得分:12)

您也可以使用逻辑测试

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)

答案 2 :(得分:10)

这是两个简单的例子

> 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

答案 3 :(得分:2)

请注意上面给出的示例中的第三个参数(值):值是常量(例如&#39; Z&#39;或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

...等

现在假设您想要这样做,就是将列中的值乘以&#39; a&#39; 2,但只有列&#39; b&#39;是&#34; X&#34;。我的直接想法是这样的:

with(tmp, replace(a, b=="X", a*2))
但是,这并不能提供理想的结果。 a * 2将定义为固定向量,而不是对“a”和“a”的引用。柱。向量&#39; a * 2&#39;因此将

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

在“替换”的开头操作。因此,第一行&#39; b&#39;等于&#34; X&#34;,&#39; a&#39;中的值将被放置2.第二次,它将由4等替换......它不会被该特定行中的两倍值替换。

答案 4 :(得分:1)

这是一个例子,我发现replace()函数对我有用。该问题需要将长整数向量更改为字符向量,并将其整数替换为给定的字符值。

## figuring out replace( )
(test <- c(rep(1,3),rep(2,2),rep(3,1)))

看起来像

[1] 1 1 1 2 2 3

我希望用A替换每1个,用B替换2,用C替换3

letts <- c("A","B","C")

所以在我自己的秘密小“脏话”我用了一个循环

for(i in 1:3)
{test <- replace(test,test==i,letts[i])}

做了我想要的事情

test
[1] "A" "A" "A" "B" "B" "C"

在第一句话中,我故意忽略了真正的目标是使整数的大向量成为因子向量,并为整数值(级别)分配一些名称(标签)。

所以在这里执行replace()应用程序的另一种方法是

(test <- factor(test,labels=letts))
[1] A A A B B C
Levels: A B C