Ik heb een dataset met de naam bwght
die de variabele cigs
(sigaretten gerookt per dag) bevat
Als ik het gemiddelde van cigs
in de dataset bwght
bereken 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 cigs
te 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>0
als eerste element te gebruiken, stelt u in dat u alleen de rijen hebt waarin cigs
niet 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 > 0
Zoals 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"]))