如何按日期对数据框进行排序

时间:2011-06-05 22:00:36

标签: r sorting date dataframe

我需要在R中按日期对数据框进行排序。日期全部采用“dd / mm / yyyy”的形式。日期在第3列。列标题为V3。我已经看到了如何按列对数据框进行排序,我已经看到了如何将字符串转换为日期值。我无法将两者结合起来按日期对数据框进行排序。

8 个答案:

答案 0 :(得分:107)

假设您的数据框名为d

d[order(as.Date(d$V3, format="%d/%m/%Y")),]

阅读我的博客文章Sorting a data frame by the contents of a column,如果这没有意义的话。

答案 1 :(得分:21)

如今,使用lubridate和dplyr库是最有效和最舒适的。

lubridate包含许多函数,可以轻松地将日期分析为POSIXctDate个对象。在这里,我们使用dmy自动解析Day, Month, Year格式的日期。一旦您的数据采用日期格式,您可以根据需要使用dplyr::arrange(或任何其他订购功能)对其进行排序:

d$V3 <- lubridate::dmy(d$V3)
dplyr::arrange(d, V3)

答案 2 :(得分:15)

如果您想按降序排序日期,减号不适用于日期。

out <- DF[rev(order(as.Date(DF$end))),]

但是,通用功能可以产生相同的效果:rev()。因此,您可以将rev和order混合起来:

#init data
DF <- data.frame(ID=c('ID3', 'ID2','ID1'), end=c('4/1/09 12:00', '6/1/10 14:20', '1/1/11 11:10')
#change order
out <- DF[rev(order(as.Date(DF$end))),]

希望它有所帮助。

答案 3 :(得分:2)

如果您只想重新安排从最旧到最新的日期等等,您可以随时执行:

if ($username && $password_sha1) {
    $query = mysqli_query ( $conn, "SELECT * FROM portofoliu_table WHERE account= '$username'" );
    $numrows = mysqli_num_rows ( $query );

    $val = 1;

    if ($numrows != 0) {

        while ( $row = mysqli_fetch_assoc ( $query ) ) {
            $db_account = $row ['account'];
            $db_password = $row ['password'];
        }
        if ($username == $db_account && $password_sha1 == $db_password) {

            //----------------------------------------HERE--------------------------------------------------------
            mysqli_query ( $conn, "UPDATE portofoliu_table SET check = '$val' WHERE account= '$username'" );
            //----------------------------------------------------------------------------------------------------

            $_SESSION ['account'] = $username;
            $_SESSION ["logged"] = true;

            header ( "location: AboutMe.php" );
            exit ();
        } else {
            echo "<div id='err'>Your password is incorrected</div>";
        }
        $_SESSION ["logged"] = false;
        exit ();
    } else {
        die ( "<div id='err'>That user don't exists</div>" );
    }
} else {
    die ( "<div id='err'>Please enter a username and password</div>" );
}

它拯救了我出口进出excel只是为了排序雅虎财经数据。

答案 4 :(得分:2)

我通过源码中的美国格式(mm-dd-yyyy HH-MM-SS PM / AM)找到了工作时间的唯一方法......

df_dataSet$time <- as.POSIXct( df_dataSet$time , format = "%m/%d/%Y %I:%M:%S %p" , tz = "GMT")
class(df_dataSet$time)
df_dataSet <- df_dataSet[do.call(order, df_dataSet), ] 

答案 5 :(得分:1)

您可以使用order()对日期数据进行排序。

# Sort date ascending order
d[order(as.Date(d$V3, format = "%d/%m/%Y")),]

# Sort date descending order
d[rev(order(as.Date(d$V3, format = "%d/%m/%y"))),]

希望这会有所帮助,

链接到我的法定答案https://qr.ae/TWngCe

谢谢

答案 6 :(得分:0)

如果您有一个名为daily_data的数据集:

daily_data<-daily_data[order(as.Date(daily_data$date, format="%d/%m/%Y")),] 

答案 7 :(得分:0)

您也可以使用 arrange 库中的 dplyr

以下代码段会将您的原始日期字符串修改为日期对象,并按它排序。这是一个很好的方法,因为您将日期存储为日期,而不仅仅是字符串。

dates <- dates %>%
  mutate(date = as.Date(date, "%d/%m/%Y")) %>%
  arrange(date)

如果您只想按字符串排序(通常是次等选项),您可以这样做:

dates <- dates %>%
  arrange(date = as.Date(date, "%d/%m/%Y"))