Я работаю над проектом, связанным с данными 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)
Вот решение, которое использует 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 >
Попробуйте что-то вроде:
library(tidyverse) world.data %>% group_by(location) %>% top_n(1,date)
или без трубы
top_n(group_by(world.data, location), 1, date)