根据其他列(R)中的值将变换应用于向量的列

时间:2013-10-22 14:48:37

标签: r matrix

我知道这可能是一个非常简单的问题,但我是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()工作!救命!!

2 个答案:

答案 0 :(得分: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中的一些相当基本的操作。

答案 1 :(得分: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