Извлекать строки для первого появления переменной во фрейме данных, когда дата находится на оси x и состояния

#r #economics

#r #экономика

Вопрос:

Отредактировано: Пример:

 FIPS       Date     Counts 
1001       Jan_22    0
1003       Jan_22    1
1004       Jan_22    0
1001       Jan_23    1
1003       Jan_23    5
1004       Jan_23    0
1001       Jan_24    6
1003       Jan_24    10
1004       Jan_24    1 
1001       Jan_25    8
1003       Jan_25    12
1004       Jan_25    3

Result:
    FIPS   Date     Counts
    1001   Jan_23   1
    1003   Jan_22   1
    1004   Jan_24   1
  

Я пытаюсь найти количество дней с момента 1-го случая Covid-19 в разных округах Соединенных Штатов. Мне нужно найти первое вхождение 1 случая, подтвержденного в этом округе, а затем получить R, чтобы сообщить мне для каждого кода FIPS, на какую дату это было в первый день, когда это было подтверждено для 1 случая. Я делаю все 3141 округ. Даты идут от Jan_22 до April_30.

Редактирование 3: И количество наблюдений равно 314200, с 3 переменными.

 t.first <- data_long[match(unique(data_long$Counts, data_long$Counts))]`
  

Я хочу использовать t.first, чтобы попытаться получить первое вхождение в эти данные.

Комментарии:

1. Основываясь на вашем описании, я чувствую slice_head , что функция может быть полезна после упорядочивания данных

2. Ронак Шах Спасибо за напоминание, я только что изменил его

Ответ №1:

Вы можете сохранить строки, где Counts > 0 , а затем для каждой FIPS выбрать 1-ю строку.

 library(dplyr)
df %>%
  filter(Counts > 0) %>%
  group_by(FIPS) %>%
  slice(1L)

#   FIPS Date   Counts
#  <int> <chr>   <int>
#1  1001 Jan_23      1
#2  1003 Jan_22      1
#3  1004 Jan_24      1
  

Комментарии:

1. Какова часть 1L функции среза — почему бы просто не срезать (1)?

2. Это то же самое. 1L является целым числом, 1 является числовым.

3. Если бы я использовал большой набор данных, где набор данных называется «data_long», куда бы я вставил это, чтобы получить все первое вхождение 1 в этом наборе данных.

4. Если у вас одинаковые столбцы и имена столбцов df_long , используемые df_long вместо df .

5. Да, это работает, но до этого у меня было 3142 наблюдения, теперь у меня только 2844 наблюдения, очищает ли этот код некоторые данные N / A?

Ответ №2:

Мы можем использовать base R

 subset(df1[df1$Counts >0,], !duplicated(FIPS))
#  FIPS   Date Counts
#2 1003 Jan_22      1
#4 1001 Jan_23      1
#9 1004 Jan_24      1
  

данные

 df1 <- structure(list(FIPS = c(1001L, 1003L, 1004L, 1001L, 1003L, 1004L, 
1001L, 1003L, 1004L, 1001L, 1003L, 1004L), Date = c("Jan_22", 
"Jan_22", "Jan_22", "Jan_23", "Jan_23", "Jan_23", "Jan_24", "Jan_24", 
"Jan_24", "Jan_25", "Jan_25", "Jan_25"), Counts = c(0L, 1L, 0L, 
1L, 5L, 0L, 6L, 10L, 1L, 8L, 12L, 3L)), class = "data.frame", 
row.names = c(NA, 
-12L))