我想使用自定义函数替换矩阵中的某些值。我想要做的是创建一个名为" 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)
我将不胜感激任何建议。
答案 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])
}
}