我有一个日期列表和相应的值。我想仅将日期与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
答案 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']