如何使用R乘以替代值?

时间:2015-06-03 05:14:50

标签: r

我有一个日期列表和相应的值。我想仅将日期与9月或任何替代日期隔离,并将相应的值乘以10.请指导我。

    Date    Index values
Jan 2011            2134
Feb 2011            2258
Mar 2011            2032
Aug 2011            2012
Sep 2011            2236
Sep 2012            2235
Sep 2013            2238

2 个答案:

答案 0 :(得分:3)

如果要将日期与“9月”分开并将“Index_vaues”与10相乘,请使用grep为“日期”列中的“9月”元素创建数字行索引。使用该索引对“Index_values”进行子集化,并将这些元素与“10”相乘。

indx <- grep('Sep', df1$Date)
df1$Index_values[indx] <- df1$Index_values[indx]*10
df1[indx,]
#      Date Index_values
#5 Sep 2011        22360
#6 Sep 2012        22350
#7 Sep 2013        22380

或者使用data.table,我们可以更快地完成此操作。我们将'data.frame'转换为'data.table'(setDT(df1)),使用substr获取'Date'的前三个字符,创建一个逻辑索引(=='Sep')和通过乘以:=,为i分配(10)'Index_values'为真。

library(data.table)
setDT(df1)[substr(Date, 1,3)=='Sep', Index_values:= 10*Index_values]

如果您需要使用'Sep'subset'日期'

setDT(df1)[substr(Date, 1,3)=='Sep'][, Index_values:=10*Index_values]

答案 1 :(得分:0)

我建议您在使用有时间限制的观察时使用时间序列。您可以使用xts时间序列对象轻松完成所需操作(假设dt是您的data.frame):

ts=xts(df$Index.values, order.by=as.Date(df$Date,'%b %Y'))
ts$Index.values['2011-01']=ts$Index.values['2011-01']*10
ts['2011-01']