基于另一个向量截断向量值

时间:2010-11-08 04:33:08

标签: r

这是我希望在R中实现的通用算法:

if (x[i]>y[i]) x[i] = y[i]

xy当然是矢量。这个问题看起来像循环是解决方案。

3 个答案:

答案 0 :(得分:8)

有几种可能性。首先使用ifelse函数(因为if(){} else {} constuct不适用于向量):

x <- ifelse( x > y, y, x)

或使用逻辑索引:

x[ x>y ] <- y[ x>y ]

这两个假设x和y的长度相同,并且隐式地比较和分配元素,因此不需要索引

答案 1 :(得分:2)

好,DWin告诉你为什么你绝对不需要在R中循环。但显然你不想做你所要求的,或者你的评论没有任何意义。

如果您想选择要更改的内容,只需在DWin解决方案中添加额外的逻辑向量,例如:

x <- 1:10
y <- 10:1

# say I want to change every second index
id <- seq.int(length(x))%%2

ifelse(x>y & id,y,x)

只要id:

,你就可以做你想做的事
  • 与x和y
  • 一样长
  • 包含1 / TRUE表示可以更改,0 / FALSE表示无法更改

答案 2 :(得分:1)

最短的回答肯定是

x <- pmax(x,y)