R - 根据月份分配值的新列

时间:2014-05-08 17:22:34

标签: r date assign date-arithmetic r-factor

我有一个包含日期列的数据框:

          date  t14  rh14
1   2013-05-01 14.8  56.5
2   2013-05-02 14.5  71.8
3   2013-05-03 17.5  40.3
4   2013-05-04 19.0  34.6
5   2013-05-05 21.4  45.3

其中可以提取日期的月份(我使用以下内容:)

date=as.Date(paste(df.date$year,df.date$month,df.date$day, sep="-"),format="%Y-%m-%d")

现在我想在我的数据框中添加一个新列,这是一个因子f,取决于月份(1月 - >第一个值等)

factor=c(0.22,0.22,0.22,0.29,0.29,0.28,0.26,0.25,0.23,0.22,0.22,0.22)

一直在寻找解决方案但仍然不知道从哪里开始。对于R和一般的编程来说还是一个新手。任何帮助将非常感激。提前谢谢!

2 个答案:

答案 0 :(得分:1)

听起来您希望将月份存储为单独的变量?如果您创建日期对象,则可以将其格式化为您喜欢的任何内容。

temp$date =as.Date(temp$date,format="%Y-%m-%d")
temp$month =format(temp$date, format="%B")
temp$month2 =format(temp$date, format="%m")

结果:

> temp$month
[1] "May" "May" "May" "May" "May"

或者,作为数字:

> temp$month2
[1] "05" "05" "05" "05" "05"

编辑:听起来你想要从因子列表中查找值(可能称之为其他东西,该术语已在R世界中使用)。然后你可以使用@JVL建议的月份值来查找,但你需要先转换为整数。可能是5月,6月将是7,依此类推。

 value_factor=c(0.22,0.22,0.22,0.29,0.29,0.28,0.26,0.25,0.23,0.22,0.22,0.22)
 value_factor[as.numeric(temp$month)]

对于您的数据,它变为

 f[as.numeric(temp$month)]
 [1] 0.29 0.29 0.29 0.29 0.29

答案 1 :(得分:0)

听起来您已将月份存储为df.date数据框中的单独变量。如果是这样,你可以像这样创建一个因子:

Haude.input$monthF <- factor(df.date$month, levels=1:12, labels=c(0.22,0.22,0.22,0.29,0.29,0.28,0.26,0.25,0.23,0.22,0.22,0.22))

但是,您的值似乎更适合数字变量而不是因子(在R中,'因子'指的是绝对的东西)。如果这确实是真的,你可以这样做:

values = c(0.22,0.22,0.22,0.29,0.29,0.28,0.26,0.25,0.23,0.22,0.22,0.22)
Haude.input$monthF <- values[df.date$month]