我有一个名为d
的矩阵。
这是d
矩阵
V1 V2 V3 V4
1 I 14.06863 11.50424 333173.1
2 N 14.50265 11.89501 387709.7
3 I 14.55234 11.95746 402124.0
4 I 14.78606 12.14149 453059.3
5 N 15.16970 12.51004 496142.1
6 D 14.41104 11.81296 539661.3
7 D 14.86976 12.23968 603475.4
我找到了
d$Delta_Cost <- c(0, diff(d[, 4]))
d$Delta_LY <- c(0, diff(d[, 2]))
我需要遍历矩阵并删除满足此条件的行
Delta_Cost>0 & Delta_LY<0
但我不知道如何在R中这样做。
谢谢!
答案 0 :(得分:1)
以下是您的数据的可重现版本:
d <- read.table(
text = "
V1 V2 V3 V4
1 I 14.06863 11.50424 333173.1
2 N 14.50265 11.89501 387709.7
3 I 14.55234 11.95746 402124.0
4 I 14.78606 12.14149 453059.3
5 N 15.16970 12.51004 496142.1
6 D 14.41104 11.81296 539661.3
7 D 14.86976 12.23968 603475.4",
header = TRUE
)
由于您希望循环的内容至少运行一次,因此您希望repeat
循环而不是while
循环。 to_remove
是一个逻辑向量,只要您想删除该行,就会TRUE
。如果没有要移除的行if(!any(to_remove))
,我们就会突破循环。
repeat
{
Delta_Cost <- c(0, diff(d[, 4]))
Delta_LY <- c(0, diff(d[, 2]))
to_remove <- Delta_Cost > 0 & Delta_LY < 0
if(!any(to_remove))
{
break
}
d <- d[!to_remove, ]
}
d
## V1 V2 V3 V4
## 1 I 14.06863 11.50424 333173.1
## 2 N 14.50265 11.89501 387709.7
## 3 I 14.55234 11.95746 402124.0
## 4 I 14.78606 12.14149 453059.3
## 5 N 15.16970 12.51004 496142.1