【问题标题】:How to re-order month column in df to match correct order of months in dataframe? [duplicate]如何重新排序 df 中的月份列以匹配数据框中正确的月份顺序? [复制]
【发布时间】:2019-11-14 05:33:05
【问题描述】:

我有一个包含六列的数据框 - 其中一列是月份。我想重新排序此列以匹配月份的顺序(一月、二月、三月、四月、五月、六月等)。我想重新排序所有行,以便数据也根据月份的变化匹配新订单(即,V1 也随着重新排序而移动。

我打算编写一个函数来执行此操作,但我确信有更简单的方法(包)可以做到这一点。

这是我的 df:

library(tidyverse)

# Dataframe
df <- tribble(
    ~ID, ~Month, ~V1, ~V2, ~V3,
    1,  "Jan",   2,  3,  5,
    1,  "Feb",   3,  4,  6,
    1,  "Mar",   7,  8,  9,
    2,  "May",   1,  1,  1,
    2,  "Feb",   2,  3,  4,
    2,  "June",   7,  8,  8
)
df

感谢任何帮助!

【问题讨论】:

  • 如果您一直使用缩写词或整月,您将很容易使用 akrun 的建议或欺骗。如果你拼写出“June”,但其余部分使用缩写,你将不得不稍微调整它作为一个特殊情况。 (我建议my_months = month.abb; my_months[6] = "June",然后在答案中使用my_months 而不是month.abb。)

标签: r dataframe dplyr tidyverse


【解决方案1】:

更简单的选择是使用内置的“month.abb”match

library(dplyr)
df %>%
    arrange(match(Month, month.abb))

如果是全名而不是缩写,使用month.name

df %>%
   arrange(match(Month, month.name))

【讨论】:

  • 不幸的是,它不起作用-当我执行 str(df) 时-字段“月份”是从 4 月开始的 9 个级别的一个因素(请记住,我是从 excel 文件中读取的-初始输入是我的问题吗?
  • @Dinho 你的例子对我有用。转换factorto character` 并尝试arrange(match(as.character(Month), month.abb)) 假设值的格式相同
  • 对不起 - 我的输入不清楚 - 它是全名(1 月、2 月、3 月等...) 没有缩写。我可能会更改初始输入中的格式,但如果 .abb 可以解决问题,我应该改用 .name 吗?
  • @Dinho 在这种情况下而不是 month.abb 使用 month.name
  • @Dinho month.name# [1] "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November" "December"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
相关资源
最近更新 更多