#r
Вопрос:
У меня есть большой фрейм данных в R. И вот что я хочу: если имя end_station_name текущей поездки равно имени start_station_name следующей поездки, то удалите эту текущую поездку. Например, для второй поездки ее имя end_station_name равно имени start_station_name третьей поездки, затем удалите вторую поездку.
ride start_station_name end_station_name 1 A B 2 B C 3 C D 4 M N 5 K L
Я хочу получить такой результат:
ride start_station_name end_station_name 3 C D 4 M N 5 K L
Заранее спасибо!!
Ответ №1:
Простой способ — использовать for
цикл.
- *Вам необходимо изменить код, если есть другие формы пропущенного значения (например, » «).
- ** Вам необходимо изменить код, если вы также решите удалить строки/строки с пропущенными значениями.
df lt;- data.frame(ride = 1:10, start_station_name = c("A", "B", "C", "M", "K", "A", "B", "C", "M", "K"), end_station_name = c("B", "C", "D", "N", NA,"B", "C", "D", "N", "L")) n_row lt;- nrow(df) for (i in 1:(n_row-1)){ if(sum(is.na(df[i, ])) == 0){ # check whether there are missing values* (NA) in the row if(df$end_station_name[i] == df$start_station_name[i 1]){ df[i, ] lt;- 0 # assign an arbitrary value for its row to be deleted later } }else{ i lt;- i 1 # skip** the row if there are missing values (NA) } } df1 lt;- df[which(df$ride != 0), ] df1
Результат
ride start_station_name end_station_name 3 3 C D 4 4 M N 8 8 C D 9 9 M N 10 10 K L
Комментарии:
1. Большое вам спасибо за потраченное время! Но поскольку у меня большой фрейм данных, когда я использую код для его запуска, в нем появляется ошибка: «Ошибка в if (df$end_station_name[i] == df$start_station_name[i : отсутствует значение, где требуется TRUE/FALSE», я не уверен, как решить эту проблему. Большое спасибо!
2. Скорее всего, в вашем фрейме данных отсутствуют значения. В пересмотренном ответе это учитывается, если отсутствует значение NA.