创建自定义函数以替换R中的值

时间:2016-02-16 05:46:45

标签: r function if-statement matrix replace

我想使用自定义函数替换矩阵中的某些值。我想要做的是创建一个名为" replace.mixed"的函数。特别是" 7替换为0"和" 8和9到NA"。我试过以下但是没有用。

"replace.mixed" <- function (x) {
if(x = 7) {x == 0}
if(x == 8 || 9) {x == NA}
}

### test function
data <- matrix(1:12,3,4) # create a matrix
replace.mixed(data)

我将不胜感激任何建议。

3 个答案:

答案 0 :(得分:3)

我们可以使用ifelse

 replace.mixed <- function(x) {
  x[] <- ifelse(x==7, 0, ifelse(x %in% c(8,9), NA, x))
 x}

 replace.mixed(data)
 #     [,1] [,2] [,3] [,4]
 #[1,]    1    4    0   10
 #[2,]    2    5   NA   11
 #[3,]    3    6   NA   12

这也可能是代码高尔夫的

(data!=7)*data *NA^(data %in% 8:9)
#     [,1] [,2] [,3] [,4]
#[1,]    1    4    0   10
#[2,]    2    5   NA   11
#[3,]    3    6   NA   12

答案 1 :(得分:1)

您也可以使用which()进行索引。

data[which(data == 7)] <- 0
data[which(data == 8 | data == 9)] <- NA
data
[,1] [,2] [,3] [,4]
[1,]    1    4    0   10
[2,]    2    5   NA   11
[3,]    3    6   NA   12

使用which()的功能是:

replace<-function(x){
    x[which(x == 7)]<-0
    x[which(x == 8 | x == 9)]<-NA
  return(x)
  }

希望这会有所帮助。

答案 2 :(得分:-1)

尝试以下代码

 replaced.mixed<-function(x){
  if(x==7) {x==0}
  else if(x==8 || x==9) {x='NA'}
  else x
}
data<-matrix(1:12,3,4)
data1<-matrix(,3,4)
x<-replaced.mixed(data[1,1])
for (i in 1:3){
  for (j in 1:4){
    data1[i,j]<-replaced.mixed(data[i,j])
  }
}
相关问题