R - 当两个连续行具有相同值时删除一行 - 如何?

时间:2015-10-07 14:18:21

标签: r

我有一个data.frame,其rownames是一个日期列表,它有一列收盘价。 我想删除收盘价等于前一行的行。

我尝试编写代码但它不起作用,我无法理解它是语法错误还是代码本身完全错误。

removefunction <- function(x) {
    for(i in 1:nrow(x)) {
    if(x[1+i] == x[i]) {
    x[1+i] <- "NA"}}
    na.omit(x)
}

我想在data.frame中选择值时存在问题,但我无法弄清楚如何解决它。

编辑: 这是我的data.frame的样本:

%  row.names  Close
1  2001-01-01  1837.36
2  2001-01-02  1785.86
3  2001-01-03  1875.56
4  2001-01-04  1855.82
5  2001-01-05  1807.13
6  2001-01-08  1804.04
7  2001-01-09  1810.98
8  2001-01-10  1828.50
9  2001-01-11  1847.37
10 2001-01-12  1835.53
11 2001-01-15  1835.53
12 2001-01-16  1847.13

我的目标是删除第11行,因为它与第10行具有相同的Close值。

错误是:[。data.frame(x,1 + i)中的错误:选择了未定义的列

1 个答案:

答案 0 :(得分:1)

为了比我在评论中所说的更具体,以下是diff如何使用一些示例数据:

set.seed(123)
df <- data.frame(v1=1:10, v2=sample(c(1, 2), 10, replace=T))
> df
#  v1 v2
#1   1  1
#2   2  2
#3   3  1
#4   4  2
#5   5  2
#6   6  1
#7   7  2
#8   8  2
#9   9  2
#10 10  1

df[c(T, diff(df$v2)!=0), ]
#   v1 v2
#1   1  1
#2   2  2
#3   3  1
#4   4  2
#6   6  1
#7   7  2
#10 10  1

修改
如果您的data.frame被调用df,那么您可以使用自己的数据:df[c(T, diff(df$Close)!=0), ]