如何在R中编写代码以对相似行值的列值进行排序?

时间:2018-10-29 02:19:14

标签: r

如您所见,我有两列(stop_id和到达时间)。我必须编写代码(可能是for循环),以对同一arrival_time的{​​{1}}的值进行排序。例如,如您所见,对于stop_id,我有三个stop_id = 12893值,它们不是按升序排列的。这些是:

arrival_time

我无法手动执行此操作,因为我有大约11,000个唯一的5:49:49; 20:34:07; and 18:51:13 。预先感谢。

stop_id values

2 个答案:

答案 0 :(得分:0)

您可以使用软件包dplyr。 例如:

dplyr::arrange(dataframe, stop_id, arrival_time)

答案 1 :(得分:0)

通常来说,您应该将arrival_time列转换为知道时间的适当类,例如times包中的chron类。不幸的是,您的时代不正常,因为您的时间23:59:59之外,因此标准的times类将无法正常工作。

相反,我们将列分为小时,分钟和秒,然后对它们进行排序:

library(tidyr)
res = separate(df, col = arrival_time, into = c("h", "m", "s"), remove = FALSE, convert = TRUE)
res = with(res, res[order(stop_id, h, m, s), ])
res
#    stop_id arrival_time  h  m  s
# 1    12893      5:19:49  5 19 49
# 12   12893      5:49:49  5 49 49
# 2    12893      6:20:31  6 20 31
# 3    12893      6:50:31  6 50 31
# 4    12893      7:20:31  7 20 31
# 5    12893      7:50:31  7 50 31
# 6    12893      8:20:31  8 20 31
# 7    12893      8:50:31  8 50 31
# 8    12893      9:04:49  9  4 49
# 9    12893     10:04:49 10  4 49
# 10   12893     11:04:49 11  4 49
# 11   12893     12:04:49 12  4 49
# 13   12893     13:04:49 13  4 49
# ...