【问题标题】:R - Delete one row when two sequential row have the same value - How?R - 当两个连续的行具有相同的值时删除一行 - 如何?
【发布时间】:2015-10-07 23:43:27
【问题描述】:

我有一个 data.frame,其行名是日期列表,并且有一列收盘价。 我想删除收盘价等于上一行的行。

我试图写一个代码,但它不起作用,我不明白这是语法错误还是代码本身完全错误。

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) 中的错误:选择了未定义的列

【问题讨论】:

  • 也许你可以试试diff:toremove &lt;- c(F, diff(yourvar)==0) 会给你要删除的行的索引
  • 请准确说明“它不起作用”的含义(错误消息)并提供示例数据集。
  • x[diff(x$closing_price)!=0, ]
  • 查看我的编辑以了解如何使用您的 data.frame 执行此操作(您不需要为此使用函数)。您的错误来自您没有选择任何列的事实,您需要输入 x[i, ] 例如选择整个 i-th 行。

标签: r


【解决方案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), ]

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 2021-09-12
    • 2022-08-11
    • 2020-01-08
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多