2013-10-22 47 views
0

我知道这可能是一个非常简单的问题,但我是R新手,并且一直试图在几个小时内找到它,没有运气...根据其他列中的值将变换应用于矢量的列(R)

我想只有在第二列的值是1以下矩阵的第一列中的每个元素应用转换...

> a<-matrix(c(30,40,50,60,1,0,1,0),nrow=4,ncol=2) 
> a 
    [,1] [,2] 
[1,] 30 1 
[2,] 40 0 
[3,] 50 1 
[4,] 60 0 
> 

所以这将产量(假设我的函数乘以-1的值在列1中):

> a.transformed 
    [,1] [,2] 
[1,] -30 1 
[2,] 40 0 
[3,] -50 1 
[4,] 60 0 

我认为这将意味着apply()函数,但我似乎无法得到if()的工作!帮帮我!!

+0

嗨,欢迎SO。由于您在这里很新,您可能需要阅读[** about **](http://stackoverflow.com/about)和[** FAQ **](http://stackoverflow.com/faq)网站的各个部分可以帮助您充分利用它。如果答案确实解决了您的问题,您可能需要考虑*将其标记为接受并/或将其标记为已接受,以显示问题已回答,方法是勾选合适答案旁边的小绿色复选标记。你是**没有义务这样做,但它有助于保持网站清洁未解决的问题,并奖励那些花时间解决问题的人。 –

回答

0

可以使用[运营商做逻辑比较,然后[<-运营商子集,并更换相关的值...

# rows we want to change 
id <- a[,2] == 1 
a[id , 1 ] <- a[ id , 1 ] * -1 
a 
#  [,1] [,2] 
#[1,] -30 1 
#[2,] 40 0 
#[3,] -50 1 
#[4,] 60 0 

我建议您阅读的introductory text因为这是R中一些比较基本的操作。

+0

谢谢(我错过了“==”部分!)会做! – eflores89

0

使用ifelse

a[,1]<-ifelse(a[,2]==1,a[,1]*-1,a[,1]) 
> a 
    [,1] [,2] 
[1,] -30 1 
[2,] 40 0 
[3,] -50 1 
[4,] 60 0 
+0

谢谢!很好的帮助! – eflores89

相关问题