Ответ выше, вероятно, работает лучше, так как ваши данные упорядочены. Этот метод также работает, если данные не упорядочены.
Я предполагаю, что есть один столбец, который вы хотите использовать для выбора строки (например, даты).
Вы можете решить это с помощьюиндексировать большой набор данных, а затем выбрать строку идентификатора и даты вместе с индексом, а затем использовать суммирование, чтобы найти правильный индекс и отфильтровать больший набор данных. Таким образом, вам не придется качаться вокруг всех этих сотен колонн.
library(tidyverse)
#Random dataset, date is coded as numeric for practical purposes.
#var1 and var2 pose as the >900 columns you have
large_dataset <- tibble(id=c(1,1,1,2,2,2,2,3,3,4),
date=c(10,15,20,10,15,20,25,10,15,10),
var1=rpois(10,50),
var2=rpois(10,30))
large_dataset
# A tibble: 10 x 4
id date var1 var2
<dbl> <dbl> <int> <int>
1 1 10 41 39
2 1 15 56 32
3 1 20 41 34
4 2 10 46 35
5 2 15 44 38
6 2 20 50 33
7 2 25 58 34
8 3 10 44 28
9 3 15 49 37
10 4 10 62 38
large_dataset <- mutate(large_dataset,index = c(1:nrow(large_dataset)))
key <- select(large_dataset,id,date,index)
key <- group_by(key,id) %>%
summarise(date=max(date)) %>%
left_join(key,by=c("id","date"))
small_dataset <- filter(large_dataset,index %in% key$index) %>%
select(-index) #Removing the index variable since it has served its purpose
id date var1 var2
<dbl> <dbl> <int> <int>
1 1 20 41 34
2 2 25 58 34
3 3 15 49 37
4 4 10 62 38