我找不到replace
包中base
函数的帮助页面非常有帮助。最糟糕的是,它没有任何可以帮助理解其工作原理的例子。
请您解释一下如何使用它?一两个例子会很棒。
答案 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