Eu sou muito novo no R. Eu tenho um quadro de dados com pares de variáveis de admissão e alta que devem corresponder, por exemplo:
V1adm V1dis V2adm V2dis V3adm V3dis
1 120 120 yes yes 60 60
2 110 110 yes <NA> 40 40
3 60 NA no <NA> NA NA
4 90 NA <NA> no 20 NA
Eu criei um quadro de dados com TRUE se um dos pares de variáveis estiver faltando:
# Variable names
adm_vars<- c("V1adm", "V2adm", "V3adm")
dis_vars<- c("V1dis", "V2dis", "V3dis")
# Create empty dataframe
pairs_NA<- matrix(NA, ncol=3, nrow=nrow(data))
pairs_NA<- as.data.frame(pairs_NA)
names(pairs_NA)<- paste(adm_vars, dis_vars, sep = '_')
# Add TRUE if adm OR dis variable NA
for(i in 1:3){
x<- data[, adm_vars[i]]
y<- data[, dis_vars[i]]
pairs_NA[,i]<- is.na(x) | is.na(y)
}
V1adm_V1dis V2adm_V2dis V3adm_V3dis
1 FALSE FALSE FALSE
2 FALSE TRUE FALSE
3 TRUE TRUE TRUE
4 TRUE TRUE TRUE
Para as linhas em que todos os 3 estão faltando, gostaria de criar um quadro de dados que leva o nome da coluna de 'pares_NA' como o valor da célula se esse par estiver faltando (ou seja, coluna é TRUE em pares_NA). Deve ser parecido com isto:
1 2 3
3 V1adm_V1dis V2adm_V2dis V3adm_V3dis
4 V1adm_V1dis V2adm_V2dis V3adm_V3dis
Existe uma maneira de atribuir o nome da coluna de 'pares_NA' como o valor da célula se houver um 'VERDADEIRO' nessa coluna para cada linha específica?
Podemos criar um índice lógico baseado em rowSums
e replicar os nomes das colunas de 'pares_NA' após subconjunto das linhas onde todos os valores são TRUE
i1 <- rowSums(pairs_NA) == ncol(pairs_NA)
matrix(names(pairs_NA)[col(pairs_NA[i1,])], ncol = ncol(pairs_NA))
# [,1] [,2] [,3]
#[1,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
#[2,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras