R - Выпавшие строки - PullRequest
       45

R - Выпавшие строки

0 голосов
/ 09 июля 2020

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

Некоторым пожилым людям совсем не помогают родственники, поэтому в моем первом наборе данных меньше строк, чем во втором.

Я хотел бы подсчитайте количество часов, которое дал относительно каждого старшего (старшему могут помочь многочисленные родственники), и для каждого старшего, которому не помогают, должно отображаться NA.

Ряды go от 1 до 10628 .

Вот мой первый набор данных:

head(relative)
id_senior    id_relative    hours_care
  1              1             3
  1              2             6
  3              1             5
  3              2             0
  3              3             1
  4              1             3
  ...
 10628          1             34

Вот мой второй:

head(senior)

id_senior 
   1
   2
   3
   4
  ...
 10628

И я бы хотел что-то вроде этого:

head(senior) #or whatever the name
id_senior    nbr_relative      sum_hours
  1            2                  9
  2            0                  NA  
  3            3                  6
  4            1                  3
 ...
 10638         1                  34

Пробовал примерно так:

library(dplyr)

#To count the number of relatives
nbr_relatives <- relatives %>% 
  group_by(id_senior = factor(id_senior, levels = min(id_senior):max(id_senior)), .drop = FALSE) %>%
  summarise(relatives = n_distinct(id_relatives))

#The value 0 is given to every relatives which has no care hours value
subset_caregivers$hours_recoded[is.na(subset_caregivers$hours_recoded)] <- 0


nbr_relatives <-  relative %>% 
  group_by(id_senior = factor(id_senior, levels = min(id_senior):max(id_senior))) %>%
  count(hours = sum(hours_care), na.rm = TRUE)

Но количество строк в наборе данных nbr_relatives стало 4564, помогло количество старших, а не 10628!

Где я ошибаюсь ?

1 Ответ

1 голос
/ 09 июля 2020

в Base-R,

merge(senior, aggregate(hours_care ~ id_senior, relative, sum), by = "id_senior", all.x=T)

   id_senior hours_care
1          1          9
2          2         NA
3          3          6
4          4          3
5          5         NA
         ...
20        20         NA

Изменить:

, чтобы получить дополнительный столбец в

    merge(senior, merge(aggregate(id_relative ~ id_senior, relative, length),aggregate(hours_care ~ id_senior, relative, sum)), by = "id_senior", all.x=T)

   id_senior id_relative hours_care
1          1           2          9
2          2          NA         NA
3          3           3          6
4          4           1          3
5          5          NA         NA
6          6          NA         NA
              ...

Данные:

relative <- structure(list(id_senior = c(1L, 1L, 3L, 3L, 3L, 4L), id_relative = c(1L, 
2L, 1L, 2L, 3L, 1L), hours_care = c(3L, 6L, 5L, 0L, 1L, 3L)), class = "data.frame", row.names = c(NA, 
-6L))

senior <- data.frame(id_senior = 1:20)
...