Агрегировать в R со столбцом даты, но по столбцу идентификатора - PullRequest
0 голосов
/ 18 января 2020

Я хочу aggregate (= суммировать) мои данные в соответствии с id-переменной. Тем не менее, столбец даты получает только NA после этого, я думаю, потому что он установлен как «Дата».

Я бы хотел сохранить даты такими, какие они есть.

Данные (10 первых наблюдений):

          TUCASEID AGE MALE BLACK YEAR DATASET INTERVIEW_DAY INTERVIEW_DATE
1   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
2   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
3   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
4   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
5   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
6   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
7   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
8   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
9   2.00301e+13  60    1     1 2003    2003             5      03Jan2003
10  2.00301e+13  41    0     0 2003    2003             6      04Jan2003

Затем я суммирую их с совокупностью:

timeuse_2003_mean <- aggregate(timeuse_2003[,c("AGE","MALE","BLACK","YEAR","DATASET","INTERVIEW_DAY","INTERVIEW_DATE")],
      by=list(timeuse_2003$TUCASEID),mean)

Вот вывод:

  TUCASEID         AGE MALE BLACK YEAR DATASET INTERVIEW_DAY INTERVIEW_DATE
1   2.0030100e+13  60    1     1 2003    2003             5             NA
2   2.0030100e+13  41    0     0 2003    2003             6             NA
3   2.0030100e+13  26    0     0 2003    2003             6             NA
4   2.0030100e+13  36    0     1 2003    2003             4             NA
5   2.0030100e+13  51    1     0 2003    2003             4             NA
6   2.0030100e+13  32    0     0 2003    2003             4             NA
7   2.0030100e+13  44    0     0 2003    2003             1             NA
8   2.0030100e+13  21    0     0 2003    2003             2             NA
9   2.0030100e+13  33    0     0 2003    2003             6             NA
10  2.0030100e+13  39    0     1 2003    2003             4             NA

У меня есть предупреждающее сообщение, вероятно, потому что дата отформатирована как "as.Date", но мне она нужна в этом формате, и что они также «суммируются» с помощью «агрегата».

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Это работало в 2 этапа:

Во-первых, я суммировал набор данных с суммами соответствующих переменных по идентификатору переменной TUCASEID:

timeuse_2003_sum <- aggregate(timeuse_2003[,c("CHILD_CARE_BASIC","CHILD_CARE_TEACH",
                                              "CHILD_CARE_PLAY", ,"OTHER")],
                              by=list(timeuse_2003$TUCASEID),sum_col)

timeuse_2003_sum$TUCASEID <- timeuse_2003_sum$Group.1

timeuse_2003_sum$Group.1 <- NULL

timeuse_2003_sum <- subset(timeuse_2003_sum, select=c(38,1:37))

Во-вторых, я суммировал набор данных с помощью соответствующих переменных. На этот раз я включил не только идентификатор TUCASEID в качестве группы для суммирования, но и переменные даты INTERVIEW_DATE:

 timeuse_2003_mean <- aggregate(timeuse_2003[,c("TUCASEID","AGE","MALE","BLACK","MARRIED",
                                   by=list(timeuse_2003$TUCASEID, timeuse_2003$INTERVIEW_DATE),mean)

    timeuse_2003_mean$TUCASEID <- timeuse_2003_mean$Group.1

    timeuse_2003_mean$INTERVIEW_DATE <- timeuse_2003_mean$Group.2

    timeuse_2003_mean$Group.1 <- NULL

    timeuse_2003_mean$Group.2 <- NULL

В итоге я объединил два обобщенных набора данных по идентификатору TUCASEID:

##################################################################
##     Appending Summary Statistics to single dataset again     ##
##################################################################

timeuse_2003_Summary <- merge(timeuse_2003_mean, timeuse_2003_sum, by = "TUCASEID", all.y = TRUE)
1 голос
/ 18 января 2020

Я думаю, что вам нужно противоположно тому, что вы пытались. Попробуйте:

aggregate(TUCASEID~., df, mean)

#  AGE MALE BLACK YEAR DATASET INTERVIEW_DAY INTERVIEW_DATE TUCASEID
#1  60    1     1 2003    2003             5      03Jan2003    2e+13
#2  41    0     0 2003    2003             6      04Jan2003    2e+13

data

df <- structure(list(TUCASEID = c(2.00301e+13, 2.00301e+13, 2.00301e+13, 
2.00301e+13, 2.00301e+13, 2.00301e+13, 2.00301e+13, 2.00301e+13, 
2.00301e+13, 2.00301e+13), AGE = c(60L, 60L, 60L, 60L, 60L, 60L, 
60L, 60L, 60L, 41L), MALE = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 0L), BLACK = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L), YEAR = c(2003L, 
2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L
), DATASET = c(2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2003L, 2003L, 2003L), INTERVIEW_DAY = c(5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 6L), INTERVIEW_DATE = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L), .Label = c("03Jan2003", "04Jan2003"), class = 
"factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
...