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

#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.