我是 R 的初学者。虽然我已经阅读了很多手册和这个板,但我必须问我的第一个问题。和这里有点像,但不完全一样,我不明白那里的解释。
我有一个包含数十万行和 30 列的数据框。但是对于我的问题,我创建了一个更简单的数据框,您可以使用它:
a <- sample(c(1,3,5,9), 20, replace = TRUE)
b <- sample(c(1,NA), 20, replace = TRUE)
df <- data.frame(a,b)
现在我想比较最后一列(这里是 column b
)的值,以便我迭代地查看每一行的值,如果它与下一行中的值相同。如果相同,我想0
在同一行的新列中写入 a 作为值,否则它应该是 a1
作为新列的值。
在这里你可以看到我的代码,这是行不通的,因为新列的行只包含0
:
m<-c()
for (i in seq(along=df[,1])){
ifelse(df$b[i] == df$b[i+1],m <- 0, m <- 1)
df$mov <- m
}
结果,我想要得到的,看起来像下面的例子。有什么错误?还有比创建循环更好的方法吗?对于我的大数据集,循环可能会非常慢。
a b mov
1 9 NA 0
2 1 NA 1
3 1 1 1
4 5 NA 0
5 1 NA 0
6 3 NA 0
7 3 NA 1
8 5 1 0
9 1 1 0
10 3 1 0
11 1 1 0
12 9 1 0
13 1 1 1
14 5 NA 0
15 9 NA 0
16 9 NA 0
17 9 NA 0
18 5 NA 0
19 3 NA 0
20 1 NA 0
谢谢您的帮助!