Проблема с набором данных президентов не может удалить значения н / д - PullRequest
0 голосов
/ 04 марта 2020
#presidents is a inbuilt data set in r for time series analysis


data("presidents")
 #checking n/a values

colSums(is.na(presidents))

Output 1:
Error in colSums(is.na(presidents)) : 
  'x' must be an array of at least two dimensions
  checking for data(What is Qtr1,2,3,4(I know it's quarter but is that a label)

президенты

 Output:
         Qtr1 Qtr2 Qtr3 Qtr4
    1945   NA   87   82   75
    1946   63   50   43   32
    1947   35   60   54   55
    1948   36   39   NA   NA
    1949   69   57   57   51
    1950   45   37   46   39
    1951   36   24   32   23
    1952   25   32   NA   32
    1953   59   74   75   60
    1954   71   61   71   57
    1955   71   68   79   73
    1956   76   71   67   75
    1957   79   62   63   57
    1958   60   49   48   52
    1959   57   62   61   66
    1960   71   62   61   57
    1961   72   83   71   78
    1962   79   71   62   74
    1963   76   64   62   57
    1964   80   73   69   69
    1965   71   64   69   62
    1966   63   46   56   44
    1967   44   52   38   46
    1968   36   49   35   44
    1969   59   65   65   56
    1970   66   53   61   52
    1971   51   48   54   49
    1972   49   61   NA   NA          #NA values are there in it.
    1973   68   44   40   27
    1974   28   25   24   24

1 Ответ

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

Из того, что я понимаю, сначала вы хотите посчитать количество NA за квартал. Чтобы сделать это, вы должны преобразовать свой объект в формат, которым вы можете управлять легче. После нескольких исследований, вот что вы можете сделать, чтобы получить данные в нужном формате:

library(dplyr)
library(zoo)
library(lubridate)
library(tidyr)

# Load the dataset
data("presidents")
class(presidents)

# Convert your ts data
df <- data.frame(Y=as.matrix(presidents), date=time(presidents))

# Get your data in a more familiar format
df <- df %>%
  mutate(yearmon = as.yearmon(date)) %>%
  mutate(year = year(yearmon)) %>%
  mutate(quarter = paste0("Q", quarter(yearmon))) %>%
  select(c(year, quarter, Y)) %>%
  pivot_wider(names_from = quarter, values_from = Y) 

#Edit : remove the last row if you want your data in a long format

После того, как это будет сделано, вы можете go вернуться, чтобы выполнить

colSums(is.na(df))
* 1006. * Наконец, вы можете удалить все строки, содержащие NA, с помощью
df_nona <- df %>%
  drop_na()

Пожалуйста, будьте осторожны, поскольку, как и другие, упомянутые в комментариях, всегда спрашивайте себя, почему вы думаете, что вы должны удалить свои NA. Если вы хотите вычислить среднее значение, вы всегда можете na.rm=T, если вам нужно. В противном случае вы также можете отбросить эти наблюдения, если хотите, но тогда вам понадобятся ваши данные в длинном формате (см. Комментарий в коде выше)

...