Ma question concerne une élaboration sur une question précédemment répondue sur Combinaison de plusieurs Variables factices en une seule variable catégorique .
Dans la question demandée précédemment, la variable catégorique a été créée à partir de variables factices qui n'étaient pas mutuellement exclusives. Pour mon cas, mes variables factices sont mutuellement exclusives car elles représentent des conditions expérimentales croisées dans une conception factorielle entre 2x2 entre les sujets (qui contient également un composant des matières que je ne réponds pas ici), donc je ne pense pas Par exemple, mes données peuvent ressembler à ceci: p> J'aimerais maintenant faire des variables catégoriques qui se combinent à différents types de conditions. Par exemple, les personnes qui avaient des valeurs pour la condition A et B pourraient être codées avec une variable catégorique et des personnes qui avaient des valeurs pour la condition C et D. P> en ce moment, je 'M faisant ceci en utilisant edit: p> Les types de interaction code> fait ce que je dois faire. P>
ifelse () code> déclarations, ce qui est tout simplement un désordre chaud (et ne fonctionne pas toujours). S'il vous plaît aider! Il y a probablement une "voie plus facile" super évidente " p>
ifelse code> Les commandes que j'utilise sont les suivantes: p >
attach(df)
df$factor<-ifelse(conditionA==1 | conditionB==1, 1, NA)
df$factor<-ifelse(conditionA==2 | conditionB==2, 2, df$factor)
3 Réponses :
Eh bien, je pense que vous pouvez le faire simplement avec Une autre solution pourrait être: p> et une troisième solution, certainement plus pratical si vous avez plus de deux conditions de colonnes: p> ifelse code>, quelque chose comme:
Salut @ juba - j'aime la simplicité de la troisième solution ... mais comment modifier toutes les colonnes pertinentes en numériques si r les lit sous forme de facteur? La commande df [cols] <- AS.numérique (AS.Matrix (DF [COLS])) CODE> ne semble pas fonctionner (lorsque
cols code> est une liste de colonnes Nombres).
Je pense que cette fonction vous donne ce dont vous avez besoin (certes, c'est un piratage rapide).
tbl <- read.table(header=TRUE, text=" conditionA conditionB conditionC conditionD NA 1 NA NA 1 NA NA NA NA NA 1 NA NA NA NA 1 NA 2 NA NA 2 NA NA NA NA NA 2 NA NA NA NA 2") tbl <- data.frame(tbl) (tbl <- cbind(tbl, factor1=to_indicator(tbl, c("conditionA", "conditionB")), factor2=to_indicator(tbl, c("conditionC", "conditionD"))))
mise à jour (2019): veuillez utiliser
dplyr :: coalesce () code >
, ça marche à peu près la même chose. P>mon r package a une fonction de commodité qui permet de choisir le premier non-
NA Code> Valeur de chaque élément dans une liste de vecteurs: P>
xxx pré> (Je ne sais pas si cela fonctionne si
conditionné code> et
conditionné code> sont des facteurs. Convertissez-les en numérics avant d'utiliser
as.numeric (tel.character (...)) code> si nécessaire.) p>
sinon, vous pouvez Donner
interaction code> Essayer, combiné avec recodage des niveaux du facteur résultant - mais à moi, il semble que vous n'êtes plus intéressé par la première solution: P>
df$conditionAB <- with(df, interaction(coalesce.na(conditionA, 0), coalesce.na(conditionB, 0))) levels(df$conditionAB) <- c('A', 'B')
Merci! Bonne prise ... une faute de frappe dans les 2 dernières lignes lorsque je faisais des données d'échantillonnage.
@Roody: Code conditionné code> contient la valeur, par exemple, 3? Que devrait-il arriver alors?
Non, ce sont toutes les deux variables de facteur de niveau - 1 et 2 ne sont que les valeurs qui leur sont attribuées par qualicé, mais c'est toujours un choix dichtomique.
Bonjour, j'ai ajouté plus d'exemples. R ne me permettra pas d'installer votre colis, cependant. Cela me donne une erreur indiquant SH: Make: Commande introuvable Erreur: La compilation a échoué pour le package 'KIMISC' CODE>
@Roody: Êtes-vous sur Windows? Ensuite, vous devrez peut-être installer RTools . Sinon, installez la boîte à outils GNU ( faire code>,
g ++ code>, ...). Ou simplement copier le code de ici ...
@Roody, une autre façon de remerciement est de Up-vote i> réponses utiles.