我有一个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)中的错误:选择了未定义的列
答案 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), ]