我知道这可能是一个非常简单的问题,但我是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 :(得分: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