Как создать набор данных, используя столбцы из другой таблицы в R? - PullRequest
0 голосов
/ 02 августа 2020

Это может быть сложно и трудно объяснить. Допустим, у меня есть фрейм данных с 4 столбцами date, id, response_1 и response_2: столбец id имеет уникальные значения, переменная response_1 содержит значения 1 и 0, а переменная response_2 использует значения response_1, чтобы определить, назначать ли 1 и 0 элементу уникальный идентификатор. Если id имеет значение 0 в переменной response_1, он присваивает значение 0 переменной response_2, но как только id имеет значение 1 в переменной response_1, он остается 1 в переменной response_2 независимо от значения в response_1 (см. id 1 и 3).

sample <- data.frame(date = c("2020-04-17", "2020-04-17", "2020-04-17",
                              "2020-05-13", "2020-05-13", "2020-05-13",
                              "2020-06-12", "2020-06-12", "2020-06-12",
                              "2020-06-19", "2020-06-19"),
                     id = c(1,2,3,1,2,3,1,3,4,5,1),
                     response_1=c(0,1,0,1,0,1,0,0,0,1,1),
                     response_2=c(0,1,0,1,1,1,1,1,0,1,1))

         date id response_1 response_2
1  2020-04-17  1          0          0
2  2020-04-17  2          1          1
3  2020-04-17  3          0          0
4  2020-05-13  1          1          1
5  2020-05-13  2          0          1
6  2020-05-13  3          1          1
7  2020-06-12  1          0          1
8  2020-06-12  3          0          1
9  2020-06-12  4          0          0
10 2020-06-19  5          1          1
11 2020-06-19  1          1          1

То, что я хочу вычислить с использованием этого набора данных, - это каждый день видеть, сколько уникальных идентификаторов у нас было и сколько превратилось в 1 с начала набора данных. Например, 12 июня у нас было всего 4 уникальных идентификатора (1, 2, 3 и 4) во всем наборе данных, и 3 из них превратились в 1 (id 1, 2 и 3). 4 все еще было 0.

Вот так:

result <- data.frame(date=c("04-17-2020", "05-13-2020","06-12-2020", "06-19-2020"),
                     count_id = c(3,3,4,5), total=c(1,3,3,4))

        date count_id total
1 04-17-2020        3     1
2 05-13-2020        3     3
3 06-12-2020        4     3
4 06-19-2020        5     4

Каким будет лучший способ sh сделать это в R?

1 Ответ

5 голосов
/ 02 августа 2020

Вы можете использовать duplicated с cumsum, чтобы получить количество кумулятивных уникальных идентификаторов и взять cumsum из response_1 переменной. Затем для каждого date мы выбираем последнюю строку, чтобы получить окончательный счет.

library(dplyr)

sample %>%
  group_by(id) %>%
  mutate(response_11 = response_1 * as.integer(!duplicated(response_1))) %>%
  ungroup %>%
  mutate(count_id = cumsum(!duplicated(id)),
         total = cumsum(response_11)) %>%
  group_by(date) %>%
  slice(n()) %>%
  select(date, count_id, total)

#  date       count_id total
#  <chr>         <int> <dbl>
#1 2020-04-17        3     1
#2 2020-05-13        3     3
#3 2020-06-12        4     3
#4 2020-06-19        5     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...