#r #loops
#r #циклы
Вопрос:
Мне нужно запустить цикл для моего набора данных, ds. dim ds составляет 4000, 11. Каждая страна мира представлена. И у каждой страны есть данные за период с 1970 по 1999 год.
Набор данных содержит недостающие данные среди своих 8 строк. Мне нужно запустить цикл, который вычисляет, сколько недостающих данных имеется В год. год указан в df $ year.
Я почти уверен, что годы (1970, 1971, 1972 …) являются числовыми значениями.
Это мой текущий код
missingds<-c()
for (i in 1:length(ds)){
missingds[names(ds)[i]]<-sum(is.na(ds[i]))/4000
}
Это дает мне долю отсутствующих данных на переменную ds. Я просто не могу понять, как заставить его сообщать о доле всех переменных в год.
У меня есть индикаторная переменная ds $ missing, которая сообщает 1, если в любом из столбцов этой строки есть NA, и 0, если нет.
Ответ №1:
Чтобы подсчитать количество NA
значений в каждом столбце с помощью dplyr, вы можете сделать :
library(dplyr)
result <- data %>%
group_by(Year) %>%
summarise(across(gdp_growth:polity, ~sum(is.na(.))))
В базе R вы можете использовать aggregate
:
aggregate(cbind(gdp_growth, gdp_per_capita, inf_mort, pop_density, polity)~year,
data, function(x) sum(is.na(x)))
Замените sum
на mean
, если вы хотите подсчитать доли NA
значений в каждом year
.
Комментарии:
1. Как насчет того, чтобы не использовать dplyr?
2. @869picardy обновил ответ с помощью опции base R. Кстати, будет полезно, если вы разместите свои данные в воспроизводимом формате вместо скриншота. Мы не можем скопировать данные со снимка экрана.
Ответ №2:
Использование data.table
library(data.table)
setDT(data)[, lapply(.SD, function(x) sum(is.na(x))),
by = Year, .SDcols = gdp_growth:polity]