2015-04-16 45 views
-2

我有一个数据集有2列,即“时间(Ti)”和“计数器(Co)”。每当计数器为1时,我应该计算该“行时间”与前一“行时间”之间的时间差。Ifelse in for循环不产生所需的输出

为了实现上述要求,我使用的以下逻辑

for (i in 1:length(file1$counter)) 
{ 
    n1 <- ifelse(file1$counter==1,(file1$TIME[(i)] - file1$TIME[(i-1)]),0) 
} 

但是我得到同样,n1是默认显示为时间序列与开始= 1标准输出作为0 0 2 2 2 2 2 0 0 0 0 0 0 2 2 2 2 2 0 0代替0 0 2 1 4 1 4 0 0 0 0 0 0 2 2 2 2 2 0 0 ,结束= 20和 频率= 1.

+2

'ifelse'被矢量,所以你不应该需要外显for循环,或者你需要使用'如果(..)... else ...' –

回答

2

由于docendo discimus指出,ifelse是R中的矢量化操作。您可以省略for循环以获得所需的结果。这里有一个例子:

filename = c("aa", "bb", "cc") 
counter = c(1, 2, 3) 
df = data.frame(filename, counter) 
df$n1 <- ifelse(df$counter == 1, "one", "other") 

这让我们的更新df

filename counter n1 
1  aa  1 one 
2  bb  2 other 
3  cc  3 other 
+0

谢谢Matt&docendo。如所暗示的那样,只使用ifelse条件。我仍然得到旧的结果。该问题已详细张贴在http://stackoverflow.com/questions/29669891/how-to-find-the-difference-in-tme-series-data。请再说一说如何处理。 –