2014-01-07 77 views
-2

我已经发布了类似的问题之前,并得到了一个快速的答案,但只是一个R初学者,并没有能够适应我所需要的。更改数据根据条件在R

基本上我想采取下面的代码(如果Date_Index介于两个数字之间,并且df是< X,那么将df转换为Y)并且使其仅适用于满足特定条件的条目,即:

拥有:df[df$Date_Index >= 50 & df$Date_Index <= 52 & df < .0000001]=1

地址:if df$Date_Index <= 49 AND df = 0.00 ignore the above statement, else execute:

换句话说,我需要相当于一个如果,那么,else子句。如果Date_Index <= 49 and df = 0,独自离开,否则,如果Date_Index >=50 and Date Index <= 52 and df < .001然后用1

这个(简单的)数据集替换数据(日期索引行50-52)应说明它足够的:

xx <- matrix(0,52,5) 
xx[,1]=1 
xx[,3]=1 
xx[,5]=1 
xx[50:52,]=0 
xx[,1]=1:52 
xx[50,3]=1 

所以我” d是第2列和第4列保持全0,但第3列和第5列的底部继续全部为1。

+3

你拥有了不看的权利。似乎你想索引行,但你是索引元素。另外,您不是索引变量B,而是索引* entire *数据框(df <.0000001),并且不引用要分配给的变量Y.这就是为什么我们要求可重复的例子,因为我没有看到甚至有什么工作。因此很难进入下一步并添加额外的子句。请参考前面的问题,或者在这里添加一个完整的,小的,可重现的例子。 –

+1

我想你错过了应该比较的那块df。 df <.0000001。 另外。用df = 0.0时要非常小心;我希望你知道df == 0.0和df = 0之间的区别。一个很好的诀窍是在怀疑时写入0 == df –

+0

对不起,由于数据隐私问题,无法共享我的代码,我尝试编辑原始问题以帮助解释我需要if,then,else子句的语法。对不起,如果我很困惑,但我很欣赏你的时间。 – Austin

回答

0

我想你正在寻找这样的:

xx[xx[,1] >= 50 & xx[,1] <= 52, c(FALSE, !colSums(!xx[xx[,1] <= 49, -1]))] <- 1 
+0

非常感谢,我非常感谢帮助,因为我对R的速度感到满意,下次会尝试更具体的开始。 – Austin