Выбор строк из фрейма данных на основе условий по группам

#r #data.table

#r #данные.таблица

Вопрос:

У меня есть фрейм данных, который представляет собой список списков — список штормов, каждая точка шторма представляет собой строку. В одном столбце указано, находится ли каждая точка шторма над сушей. Я могу определить, какие штормы обрушились на берег, однако я не знаю, как выбрать только эти штормы, т. Е. Создать новый фрейм данных только из тех штормов, которые обрушились на берег.

Этот код позволяет мне узнать, обрушился ли шторм на берег (группируя по идентификатору, он суммирует столбец в регионе (1 или 0), и если больше 1, это говорит о том, что шторм обрушился на берег):

 land_tracks <- all_tracks[, sum(inregion) > 0, by = ID]
  

Дает мне:

                   ID    V1
 1: 1987051906_15933  TRUE
 2: 1987060118_16870  TRUE
 3: 1987061306_18015  TRUE
 4: 1987062100_18878  TRUE
 5: 1987062918_19507 FALSE
 6: 1987070512_20168  TRUE
 7: 1987070812_20341  TRUE
 8: 1987071218_20635  TRUE
 9: 1987071412_20762  TRUE
10: 1987071606_20881  TRUE
  

Как мне использовать это, чтобы просмотреть all_tracks, чтобы найти все строки, которые соответствуют идентификатору, где V1 == TRUE ?

У меня регулярно возникает проблема, которая land_tracks имеет 41 строку, all_tracks имеет 1879 строк, и R поднимает проблему с утилизацией.

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

1. Вы можете подмножество по V1 , а затем сделать что-то вроде all_tracks$ID %in% land_tracks$ID . Я добавил тег data.table , поскольку соответствующие наборы данных создаются и обрабатываются функциями этого пакета.

2. Спасибо, однако, используя: land_sel <- land_tracks[который (land_tracks $ V1 == TRUE),] sel_tracks <- all_tracks$ID%в% land_sel$ID sel_tracks имеет ту же длину, что и all_tracks, но имеет один столбец TRUE / FALSE, я явно пропускаю шаг!

Ответ №1:

Может быть, вы можете сделать что-то вроде ВНУТРЕННЕГО соединения между этими двумя таблицами:

 merge(all_tracks,land_tracks[which(land_tracks$V1== TRUE)], by = 'ID')
  

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

1. Спасибо, это сработало именно так, как нужно (нужно будет проверить данные, но на данный момент выглядит правильно).