Usando if else em um dataframe em várias colunas
Eu tenho um grande conjunto de dados de amostras com descritores de se a amostra é viável - parece (mais ou menos) assim, onde 'desc' é a coluna de descrição e 'blank' indica que a amostra não é viável:
desc x y z
1 blank 4.529976 5.297952 5.581013
2 blank 5.906855 4.557389 4.901660
3 sample 4.322014 4.798248 4.995959
4 sample 3.997565 5.975604 7.160871
5 blank 4.898922 7.666193 5.551385
6 blank 5.667884 5.195825 5.232072
7 blank 5.524773 6.726074 4.767475
8 sample 4.382937 5.926217 5.203737
9 sample 4.976908 3.079191 4.614121
10 blank 4.572954 4.772373 6.077195
Quero usar uma instrução if else para definir as linhas com dados inutilizáveis para NA. O conjunto final de dados deve ficar assim:
desc x y z
1 blank NA NA NA
2 blank NA NA NA
3 sample 4.322014 4.798248 4.995959
4 sample 3.997565 5.975604 7.160871
5 blank NA NA NA
6 blank NA NA NA
7 blank NA NA NA
8 sample 4.382937 5.926217 5.203737
9 sample 4.976908 3.079191 4.614121
10 blank NA NA NA
Eu tentei um loop for, mas estou tendo problemas para fazer com que o loop for altere todas as colunas em um loop. Meu conjunto de dados real tem 40 colunas, então eu prefiro não ter que processá-lo em loops separados! Aqui está o código para alterar uma coluna por vez:
for(i in 1:length(desc)){
if(dat$desc[i] =="blank"){
dat$x[i] <- NA
}
else {
dat$x[i] <- dat$x[i]
}
}
Fiz os dados de amostra com este script:
desc <- c("blank", "blank", "sample", "sample", "blank", "blank", "blank", "sample", "sample", "blank")
x <- rnorm(10, mean=5, sd=1)
y <- rnorm(10, mean=5, sd=1)
z <- rnorm(10, mean=5, sd=1)
dat <- data.frame(desc,x,y,z)
Desculpe, se esta é uma pergunta básica, passei a manhã inteira olhando para fóruns e não consegui encontrar uma solução.
Qualquer ajuda é muito apreciada!