我有一个数据框(数据)。我想通过它运行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
答案 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