Ваши условия не сработали должным образом: например, sum(!is.na(x)==1)
- это не то, что вам нужно, потому что вы хотите, чтобы sum
превышало !is.na(x)
, а не сумму !is.na(x) == 1
.
.работа:
df <- data.frame(a = c(123,534,7567,2345,3456,3476,NA,765), b = c(NA,NA,NA,NA,NA,NA,NA,NA), c = c(NA,NA,NA,NA,NA,354,NA,NA))
normalize<-function(x){
if(sum(!is.na(x))==1){
x[which(!is.na(x))] <- 1
x[which(is.na(x))] <- 0
return(x)
}else if(sum(!is.na(x))==0){
x <- NA
return(x)
}else if(sum(!is.na(x)>1)){
y <- (x-min(x, na.rm=TRUE))/(max(x, na.rm=TRUE)-min(x, na.rm=TRUE))
return(y)
}
}
as.data.frame(lapply(df, normalize))
a b c
[1,] 0.00000000 NA 0
[2,] 0.05519956 NA 0
[3,] 1.00000000 NA 0
[4,] 0.29848601 NA 0
[5,] 0.44773573 NA 0
[6,] 0.45042249 NA 1
[7,] NA NA 0
[8,] 0.08623168 NA 0