Mam zbiór danych o nazwie bwght
, który zawiera zmienną cigs
(papierosy wypalane dziennie)
Kiedy obliczam średnią cigs
w zbiorze danych bwght
przy użyciu: mean(bwght$cigs)
, otrzymuję numer 2.08.
Tylko 212 z 1388 kobiet w próbce pali (a 1176 nie pali):
summary(bwght$cigs>0)
daje wynik:
Mode FALSE TRUE NA's
logical 1176 212 0
Zostałem poproszony o znalezienie średniej cigs
wśród palących kobiet (212).
Mam trudności ze znalezieniem odpowiedniej składni do wykluczenia osób niepalących = 0 Próbowałem:
mean(bwght$cigs| bwght$cigs>0)
mean(bwght$cigs>0 | bwght$cigs=TRUE)
jeśli (bwght$cigs > 0){ suma (masa $ papierosy) }
x <-as.numeric(bwght$cigs, rm="0"); średnia(x)
Ale wydaje się, że nic nie działa! Czy ktoś może mi pomóc?
2 odpowiedzi
Jeśli chcesz wykluczyć osoby niepalące, masz kilka opcji. Najłatwiej jest chyba tak:
mean(bwght[bwght$cigs>0,"cigs"])
W przypadku ramki danych pierwszą zmienną jest wiersz, a następną kolumną. Możesz więc podzbiór używając dataframe[1,2]
, aby uzyskać pierwszy wiersz, drugą kolumnę. Możesz również użyć logiki w wyborze wiersza. Używając bwght$cigs>0
jako pierwszego elementu, tworzysz podzbiór, aby mieć tylko te wiersze, w których cigs
nie jest zerem.
Twoje pozostałe nie działały z następujących powodów:
mean(bwght$cigs| bwght$cigs>0)
To jest właściwie logiczne porównanie. Pytasz o wynik PRAWDA / FAŁSZ bwght$cigs OR bwght$cigs>0
, a następnie bierzesz z niego średnią. Nie jestem do końca pewien, ale myślę, że R nie może nawet przyjąć danych wpisanych jako logiczne dla funkcji mean()
.
mean(bwght$cigs>0 | bwght$cigs=TRUE)
Taki sam problem. Używasz znaku |
, który zwraca logikę, a R próbuje przyjąć średnią logiki.
if(bwght$cigs > 0){sum(bwght$cigs)}
Czy byłeś przypadkiem pierwotnie programistą SAS? Wygląda to tak, jak na początku pisałem. Zasadniczo if()
nie działa tak samo w R, jak w SAS. W tym przykładzie używasz bwght$cigs > 0
jako warunku if, który nie zadziała, ponieważ R będzie patrzeć tylko na pierwszy element wektora wynikający z bwght$cigs > 0. R obsługuje pętle inaczej niż SAS - sprawdź funkcje takie jak lapply, tapply i tak dalej.
x <-as.numeric(bwght$cigs, rm="0")
mean(x)
Szczerze nie wiem, co by to zrobiło. Może zadziałać, jeśli rm="0"
nie ma cudzysłowów...?
mean(bwght[bwght$cigs>0,"cigs"])
Zauważyłem, że instrukcja nie powiodła się, zwracając „argument nie jest liczbowy ani logiczny: zwracanie NA”
Konwersja na macierz rozwiązała ten problem:
mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))
Podobne pytania
Nowe pytania
r
R to darmowy język programowania typu open source i środowisko oprogramowania do obliczeń statystycznych, bioinformatyki, wizualizacji i obliczeń ogólnych. Proszę podać minimalne i powtarzalne przykłady wraz z pożądanymi wynikami. Użyj dput () dla danych i określ wszystkie pakiety inne niż podstawowe za pomocą wywołań biblioteki (). Nie osadzaj obrazów dla danych lub kodu, zamiast tego użyj wciętych bloków kodu. W przypadku pytań związanych ze statystykami należy skorzystać z https://stats.stackexchange.com.