for循环,其中条件是r中的最后一个数据记录

时间:2015-10-02 08:57:00

标签: r

我有一个数据框(数据)。我想通过它运行for循环。我想根据数据帧(数据)中的下一个实例(p)是否等于(==)或不等于(!=)前一个记录,将输出标记为0或1。目前,我只是得到了一份' 1'但是检查了print(p)for循环正在循环。任何帮助非常感谢。感谢。

data <- data.frame(movementObjects$Movement)

for (p in seq(1, nrow(data)-1)){
if (p == p-1) 
changes <- 0
else {
if (p != p-1)
changes <- 1
print(changes)
}
}

对不起,我是R的新手。这是一个数据集的示例,但这是一个我也有数字的字符串。我想要的是一个数据帧输出,根据之前的运动标记进行标记。等于或不等于最后一次

 movementObjects.Movement
1                       left
2                    forward
3                    forward
4                 non-moving
5                 non-moving
6                 non-moving
7                       left
8                 non-moving
9                      right
10                   forward
11                non-moving
12                non-moving
13                non-moving

我想是这样的:

1    1
2    0
3    1
4    0
5    0
6    1
7    1
8    1
9    1

1 个答案:

答案 0 :(得分:4)

如果我理解了您想要的内容,那就是(将您的data.frame名称更改为df,并将列名称更改为movement以获得清晰度):

`+`(tail(df$movement, -1) != head(df$movement, -1))
#[1] 1 0 1 0 0 1 1 1 1 1 0 0

<强> 说明: tail允许仅考虑(n-1)个最后元素(n是元素的总数),而head允许考虑(n-1)个第一个元素。然后比较这两个向量以找出差异,最后,使用+将逻辑结果转换为数字。

注意: 正如@ColonelBeauvel所述,您可以使用df-1进行索引,以避免使用tail:

`+`(df$movement[-1] != head(df$movement, -1))

编辑, 如果您真的想知道如何修改脚本以使for循环正常工作:

changes <- c()
for (p in 2:nrow(df)){
   if (df[p, 1] == df[p-1, 1]) changes <- c(changes, 0) else changes <- c(changes, 1)
}
print(changes)
# [1] 1 0 1 0 0 1 1 1 1 1 0 0