Voorwaardelijke gemiddelde uitspraak

Ik heb een dataset met de naam bwghtdie de variabele cigs(sigaretten gerookt per dag) bevat

Als ik het gemiddelde van cigsin de dataset bwghtbereken met:
mean(bwght$cigs), ik krijg een nummer 2.08.

Slechts 212 van de 1388 vrouwen in de steekproef roken (en 1176 roken niet):

summary(bwght$cigs>0)geeft het resultaat:

Mode      FALSE    TRUE    NA's 
logical    1176     212       0

Mij wordt gevraagd om het gemiddelde van cigste vinden onder de vrouwen die roken (de 212).

Ik vind het moeilijk om de juiste syntaxis te vinden om de niet-rokers uit te sluiten = 0
Ik heb geprobeerd:

  • mean(bwght$cigs| bwght$cigs>0)

  • mean(bwght$cigs>0 | bwght$cigs=TRUE)

  • if (bwght$cigs > 0){
    sum(bwght$cigs)
    }

  • x <-as.numeric(bwght$cigs, rm="0");
    mean(x)

Maar niets lijkt te werken! Kan iemand me alsjeblieft helpen??


Antwoord 1, autoriteit 100%

Als je de niet-rokers wilt uitsluiten, heb je een paar opties. De gemakkelijkste is waarschijnlijk dit:

mean(bwght[bwght$cigs>0,"cigs"])

Bij een dataframe is de eerste variabele de rij en de volgende de kolom. U kunt dus subsets maken met dataframe[1,2]om de eerste rij, tweede kolom te krijgen. U kunt ook logica gebruiken in de rijselectie. Door bwght$cigs>0als eerste element te gebruiken, stelt u in dat u alleen de rijen hebt waarin cigsniet nul is.

Je andere werkten niet om de volgende redenen:

mean(bwght$cigs| bwght$cigs>0)

Dit is effectief een logische vergelijking. U vraagt ​​om het ware / valse resultaat van bwght$cigs OR bwght$cigs>0, en vervolgens het gemiddelde op het nemen. Ik ben niet helemaal zeker, maar ik denk dat R niet eens geen gegevens kan nemen die zijn getypt als logisch voor de mean()-functie.

mean(bwght$cigs>0 | bwght$cigs=TRUE)

hetzelfde probleem. U gebruikt de |teken, die een logisch retourneert en r probeert het gemiddelde van logica te nemen.

if(bwght$cigs > 0){sum(bwght$cigs)}

In geen geval, was je oorspronkelijk een SAS-programmeur? Dit lijkt op hoe ik in het begin vroeger typte. Kortom, if()werkt niet op dezelfde manier in R als in SAS. In dat voorbeeld gebruikt u bwght$cigs > 0Zoals de indiensconditie, die niet werkt omdat R alleen zal kijken naar het eerste element van de vector als gevolg van BWGHT $ CIGS & GT; 0. R Handgrepen Looping anders dan SAS – Bekijk functies zoals Laply, Taply, enzovoort.

x <-as.numeric(bwght$cigs, rm="0")
mean(x)

Ik weet eerlijk gezegd niet wat dit zou doen. Het kan werken als rm="0"had geen citaten …?


Antwoord 2, Autoriteit 8%

mean(bwght[bwght$cigs>0,"cigs"])

Ik heb gevonden dat de verklaring mislukt, terugkerend “argument is niet numeriek of logisch: terugkeren NA”

Converteren naar matrix opgelost dit:

mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))

Other episodes