R - Удалить все строки, кроме тех, что на самую последнюю дату? - PullRequest
1 голос
/ 20 апреля 2020

Я работаю над проектом, связанным с данными Covid-19. У меня есть данные, которые ежедневно обновляются с Наш мир в данных . CSV-файл находится здесь: https://raw.githubusercontent.com/owid/covid-19-data/9ee33ac73942b2e37eb04014bf2a7a17a83998cf/public/data/owid-covid-data.csv

Данные имеют несколько столбцов страна, дата, случаи и т. Д. c.

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

В настоящее время мой код выглядит следующим образом. Недавно я перешел на R из другой программы, поэтому руководство полезно, даже если это глупый вопрос!

world.data < -read.csv("https://raw.githubusercontent.com/owid/covid-19-data/9ee33ac73942b2e37eb04014bf2a7a17a83998cf/public/data/owid-covid-data.csv")
world.data$iso_code < -NULL# Remove Country ISO Code
world.data$date < -as.Date(world.data$date, "%Y-%m-%d")

library(ggplot2)

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вот решение, которое использует Tidyverse. Мы группируем данные по местоположению и выбираем максимальное значение даты.

rawData <- "https://raw.githubusercontent.com/owid/covid-19-data/9ee33ac73942b2e37eb04014bf2a7a17a83998cf/public/data/owid-covid-data.csv"
download.file(rawData,"./data/owid_covid_data.csv")

data <- read.csv("./data/owid_covid_data.csv",header = TRUE, stringsAsFactors = FALSE)

library(dplyr)
data %>% group_by(location) %>% 
     filter(date == max(date)) -> filteredData

... и первые несколько строк вывода:

> head(filteredData[1:4])
# A tibble: 6 x 4
# Groups:   location [6]
  iso_code location    date       total_cases
  <chr>    <chr>       <chr>            <int>
1 ABW      Aruba       2020-04-19          96
2 AFG      Afghanistan 2020-04-19         908
3 AGO      Angola      2020-04-19          24
4 AIA      Anguilla    2020-04-19           3
5 ALB      Albania     2020-04-19         548
6 AND      Andorra     2020-04-19         704
> 
0 голосов
/ 20 апреля 2020

Попробуйте что-то вроде:

library(tidyverse)
world.data %>% group_by(location) %>% top_n(1,date)

или без трубы

top_n(group_by(world.data, location), 1, date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...