根据R中另一列的一部分更改列的值

时间:2014-11-23 20:53:45

标签: r

我有以下数据:                        关闭dn mavg up pctB sig

  

2014-11-21 13:40:00 120462.8 120244.0 120427.2 120610.4 0.5973438 1   2014-11-21 13:45:00 120461.1 120282.7 120414.9 120547.0 0.6747622 0   2014-11-21 13:50:00 120635.2 120267.1 120418.6 120570.2 1.2145544 0   2014-11-21 13:55:00 120545.0 120266.0 120419.2 120572.4 0.9105750 -1   2014-11-21 14:00:00 120495.9 120265.5 120422.2 120578.9 0.7351776 -1   2014-11-21 14:05:00 120507.5 120267.1 120427.6 120588.2 0.7487046 -1

我试图在时间为14:00时将sig列重置为0(上例中的结果将是第5行中sig的值为0而不是-1)。 我查了一下但是找不到如何根据第一列的一部分创建一个条件(这是“数据时间”,我的条件只是时间)。

任何建议都会有所帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我尝试解释你的问题。这就是您的数据:

                         close       dn     mavg       up      pctb sig
1 11/21/2014 13:40:00 120462.8 120244.0 120427.2 120610.4 0.5973438   1
2 11/21/2014 13:45:00 120461.1 120282.7 120414.9 120547.0 0.6747622   0
3 11/21/2014 13:50:00 120635.2 120267.1 120418.6 120570.2 1.2145544   0
4 11/21/2014 13:55:00 120545.0 120266.0 120419.2 120572.4 0.9105750  -1
5 11/21/2014 14:00:00 120495.9 120265.5 120422.2 120578.9 0.7351776  -1
6 11/21/2014 14:05:00 120507.5 120267.1 120427.6 120588.2 0.7487046  -1

试试这个:

dateTimes <- as.character(index(spread_BB))
time <- ldply(strsplit(dateTimes, ' '))[, 2]
df <- data.frame(time = time, sig = spread_BB$sig)
sig <- with(df, ifelse(time == '14:00:00', 0, sig))
spread_BB$sig <- NULL
spread_BB$sig <- sig

#> spread_BB
#                          close       dn     mavg       up      pctb sig
# 1 11/21/2014 13:40:00 120462.8 120244.0 120427.2 120610.4 0.5973438   1
# 2 11/21/2014 13:45:00 120461.1 120282.7 120414.9 120547.0 0.6747622   0
# 3 11/21/2014 13:50:00 120635.2 120267.1 120418.6 120570.2 1.2145544   0
# 4 11/21/2014 13:55:00 120545.0 120266.0 120419.2 120572.4 0.9105750  -1
# 5 11/21/2014 14:00:00 120495.9 120265.5 120422.2 120578.9 0.7351776   0
# 6 11/21/2014 14:05:00 120507.5 120267.1 120427.6 120588.2 0.7487046  -1