совокупное подмножество, возвращающее эту ошибку: NA введены по принуждению - PullRequest
1 голос
/ 29 марта 2020

У меня проблемы с поиском среднего значения для подмножества данных. Вот два вопроса, на которые я надеюсь ответить. Кажется, что первый работает нормально, но второй возвращает тот же ответ, что и первый, но без цифр справа от десятичного знака. В чем дело?

Появляется также ошибка: НК, введенные коэрционНК, введенные коэрционНК, введенные коэрционНК, введенные посредством коэрцион

# What is the mean suspension rate for schools by farms overall?
aggregate(suspension_rate_total ~  farms, merged_data, FUN = function(suspension_rate_total)
  mean(as.numeric(as.character(suspension_rate_total))))

# What is the mean suspension rate for schools with farms > 100? 
aggregate(suspension_rate_total ~  farms, merged_data, FUN = function(suspension_rate_total)
  mean(as.numeric(as.character(suspension_rate_total))), subset = farms< 100)

Данные

merged_data <- structure(list(schid = c("1030642", "1030766", "1030774", "1030840", 
"1130103", "1230150", "1530435", "1530492", "1530500", "1931047", 
"1931708", "1931864", "1932623", "1933746", "1937226", "1938554", 
"1938612", "1938885", "1995836", "1996016"), farms = c("132", 
"116", "348", "406", "68", "130", "370", "204", "225", "2,616", 
"1,106", "1,918", "1,148", "2,445", "1,123", "1,245", "1,369", 
"1,073", "932", "178"), foster = c("2", "0", "1", "8", "1", "4", 
"4", "0", "0", "22", "11", "12", "2", "8", "13", "13", "4", "3", 
"2", "3"), homeless = c("14", "0", "8", "4", "1", "4", "5", "0", 
"14", "35", "42", "116", "9", "8", "34", "54", "26", "31", "5", 
"11"), migrant = c("0", "0", "0", "0", "0", "0", "18", "0", "0", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0"), ell = c("18", 
"12", "114", "45", "7", "4", "50", "28", "26", "274", "212", 
"325", "95", "112", "232", "185", "121", "84", "24", "35"), suspension_rate_total = c("*", 
"20", "0", "0", "95", "5", "*", "256", "78", "33", "20", "1", 
"218", "120", "0", "0", "*", "*", "*", "0"), suspension_violent = c("*", 
"9", "0", "0", "20", "2", "*", "38", "0", "6", "3", "0", "53", 
"35", "0", "0", "*", "*", "*", "0"), suspension_violent_no_injury = c("*", 
"6", "0", "0", "47", "1", "*", "121", "52", "7", "13", "1", "77", 
"44", "0", "0", "*", "*", "*", "0"), suspension_weapon = c("*", 
"0", "0", "0", "8", "0", "*", "1", "0", "1", "1", "0", "4", "3", 
"0", "0", "*", "*", "*", "0"), suspension_drug = c("*", "0", 
"0", "0", "9", "1", "*", "59", "12", "16", "0", "0", "6", "5", 
"0", "0", "*", "*", "*", "0"), suspension_defiance = c("*", "1", 
"0", "0", "9", "1", "*", "16", "12", "0", "3", "0", "69", "30", 
"0", "0", "*", "*", "*", "0"), suspension_other = c("*", "4", 
"0", "0", "2", "0", "*", "21", "2", "3", "0", "0", "9", "3", 
"0", "0", "*", "*", "*", "0")), row.names = c(NA, 20L), class = "data.frame")

Большое спасибо.

Изображение-1 image1

Изображение-2 image2

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Уберите ваши данные:

# replace * with NA
merged_data$suspension_rate_total[merged_data$suspension_rate_total == '*'] <- NA
# convert character to numeric format
merged_data$suspension_rate_total <- as.numeric(merged_data$suspension_rate_total)
# remove comma in strings and convert character to numeric format
merged_data$farms <- as.numeric(gsub(",", "", merged_data$farms))

Вывод

# What is the mean suspension rate for schools by farms overall?
aggregate(suspension_rate_total ~  farms, merged_data, FUN = mean, na.rm = TRUE)

#    farms suspension_rate_total
# 1     68                    95
# 2    116                    20
# 3    130                     5
# 4    178                     0
# 5    204                   256
# 6    225                    78
# 7    348                     0
# 8    406                     0
# 9   1106                    20
# 10  1123                     0
# 11  1148                   218
# 12  1245                     0
# 13  1918                     1
# 14  2445                   120
# 15  2616                    33

# What is the mean suspension rate for schools with farms > 100? 
aggregate(suspension_rate_total ~  farms, merged_data, FUN = mean, na.rm = TRUE, subset = farms > 100)

# farms suspension_rate_total
# 1    116                    20
# 2    130                     5
# 3    178                     0
# 4    204                   256
# 5    225                    78
# 6    348                     0
# 7    406                     0
# 8   1106                    20
# 9   1123                     0
# 10  1148                   218
# 11  1245                     0
# 12  1918                     1
# 13  2445                   120
# 14  2616                    33
0 голосов
/ 29 марта 2020

Вы уверены, что «АН введены путем принуждения» - это ошибка, а не предупреждение. Когда вы преобразуете символьный столбец в цифру c: as.numeric(as.character(suspension_rate_total)), пробелы приводятся в NA, что указывается в предупреждениях.

Кроме того, я получаю разные ответы для обоих блоков кода

> aggregate(suspension_rate_total ~  farms, merged_data, FUN = function(suspension_rate_total)
+   mean(as.numeric(as.character(suspension_rate_total))))
   farms suspension_rate_total
1     68                    95
2    116                    20
3    130                     5
4    132                    NA
5    178                     0
6    204                   256
7    225                    78
8    348                     0
9    370                    NA
10   406                     0
11   932                    NA

> aggregate(suspension_rate_total ~  farms, merged_data, FUN = function(suspension_rate_total)
+     mean(as.numeric(as.character(suspension_rate_total))), subset = farms< 100)
  farms suspension_rate_total
1    68                    95
> 
> 

Далее, в вашем комментарии второй блок кода упоминается farms > 100?, но в вашем коде вы использовали subset = farms< 100

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...