Boxplot - toegang tot kolomnamen met variabelen

Hoe kan ik toegang krijgen tot een kolom door een variabele te gebruiken die de naam van de kolom bevat?

Laten we aannemen dat we een dataframe DF hebben met 3 kolommen: Var1 Var2 Var3 , waar Var3 bevat numerieke gegevens en Var1 en Var2 bevatten een aantal factoren.

We willen graag 2 boxplots produceren met een tijdelijke variabele die de naam van de kolom bevat:

temp<-"Var3"
boxplot(DF[temp]) #(<--that works).

Als ik dezelfde methode gebruik om een ​​boxplot te verkrijgen voor elke factor in Var2, doet het niet het volgende:

boxplot(DF[temp]~DF$Var2) #(<-- does not work).

Hoe kan ik dit laten werken?

annotatie: Als ik de naam "Var3" rechtstreeks gebruik, werkt het en toont het verschillende boxplots:

boxplot(DF$Var3~DF$Var2).

3

3 antwoord

Probeer dubbele beugels te gebruiken in plaats van enkele haakjes:

tmp1 <- 'Sepal.Width'
tmp2 <- 'Species'
boxplot( iris[[tmp1]] ~ iris[[tmp2]] )
6
toegevoegd
Bedankt voor deze suggestie. Voordat ik [ [tmp1]] probeerde, wat niet werkte. Uw oplossing is nog eenvoudiger uit te voeren en het werkt goed.
toegevoegd de auteur John, de bron

Je zou dit gewoon kunnen doen. De instructie met geeft boxplot opdracht om te zoeken naar variabelen binnen DF , de get -instructie opent het object met naam tmp .

with(DF, boxplot(get(tmp) ~ Var2))

Hier is een illustratief voorbeeld

tmp <- 'wt'
with(mtcars, boxplot(get(tmp) ~ cyl))

enter image description here

1
toegevoegd
Lieve Ramnath, heel erg bedankt voor je antwoord! Ik vond het vooral leuk dat je een gedetailleerde beschrijving geeft van wat de verschillende elementen in je code doen.
toegevoegd de auteur John, de bron

U kunt plakken gebruiken om de formule te maken en vervolgens converteren naar een formule voor de boxplot-aanroep:

boxplot(as.formula(paste(temp,"Var2",sep="~")),DF)
1
toegevoegd
Het lijkt erop dat er veel verschillende opties zijn om de taak uit te voeren. Ik heb je oplossing geprobeerd en het werkt prima. Zeer interessante methode.
toegevoegd de auteur John, de bron