0

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

4

2 回答 2

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

我建议阅读介绍性文本,因为这是 R 中一些相当基本的操作。

于 2013-10-22T14:51:46.520 回答
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
于 2013-10-22T14:55:27.913 回答