Почему я получаю АН при расчете среднего значения? - PullRequest
0 голосов
/ 02 февраля 2020

Каждый раз, когда я пытаюсь вычислить эту строку «DHS <- среднее (ahebachelors2008) - среднее (ahebachelors1992)», я получаю ответ NA. Расчет среднего (ahe2008) работает, но расчет среднего (ahebachelors2008) не работает. </p>

setwd("~/Google Drive/R Data")
data <- read.csv('cps92_08.csv')
year <- data$year
year1992 <- subset(data,year<2000)
year2008 <- subset(data,year>2000)
ahe1992 <- (year1992$ahe)
ahe2008 <- (year2008$ahe)
max(ahe1992)
min(ahe1992)
mean(ahe1992)
median(ahe1992)
sd(ahe1992)
max(ahe2008)
min(ahe2008)
mean(ahe2008)
median(ahe2008)
sd(ahe2008)

adjahe <- ahe1992*(215.2/140.3)
max(adjahe)
min(adjahe)
mean(adjahe)
median(adjahe)
sd(adjahe)

D <- mean(ahe2008) - mean(adjahe)

education <- data$bachelor
ahebachelors1992 <- subset(adjahe, education>0)
ahehighschool1992 <- subset(adjahe,education<1)
ahebachelors2008 <- subset(ahe2008,education>0)
ahehighschool2008 <- subset(ahe2008,education<1)

DHS <- mean(ahebachelors2008) - mean(ahebachelors1992)

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

education соответствует длине data, тогда как ahe2008 является подмножеством data. Поэтому, когда вы передаете education в качестве условия на ahe2008, он создает NA (потому что это соответствующее значение в ahe2008 для этих элементов.

Вот более простой пример:

d1<-c(1:5)
d2<-c(1:5,1:5)
subset(d1,d2==1)
[1]  1 NA

Возможные решения заключаются в создании отдельных bachelor векторов для каждого года или не в непрерывном подмножестве, а в использовании только нескольких условий, в которых они вам нужны.

Если вы пытаетесь не вводить полный data$something каждый попробуйте использовать with(), а еще лучше - пакет dplyr.

Например, весь код, ведущий к последней строке, может быть заменен этим (при условии, что я ничего не пропустил) :

DHS <- mean(with(data,ahe[year>2000 & education>0])) - 
       mean(with(data,ahe[year<2000 & education>0]*(215.2/140.3))

(Если вы новичок в R, обратите внимание, что структура [] является более простым способом вызова на подмножестве).

Возможно, вы захотите использовать summary, который даст вам мин, медиану, среднее и макс, и вам останется всего лишь sd, чтобы добавить вручную .:

summary(with(data,ahe[year>2000]))
0 голосов
/ 02 февраля 2020

Если значения, которые вы пытаетесь вычислить mean, содержат NA, то результатом будет NA. Вы можете преодолеть это, добавив na.rm = TRUE к своему значению:

DHS <- mean(ahebachelors2008, na.rm=TRUE) - mean(ahebachelors1992, na.rm=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...