2014-02-24 57 views
0

我有這個矩陣名爲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

我看到沒有 「最好」 對象這裏 –

+0

看到行:D $最​​佳[其中(與(d,Delta_Cost> 0&Delta_LY <0))] < - 「最佳」 – Dea12

+0

仍然沒有 「最好」 對象...你分配一個字符串。也許你想'd $ Best ==「最佳」' –

回答

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,只要你想刪除該行。如果沒有要刪除的行,我們就跳出循環。

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 
+0

我得到這個:Error:object'best'not found – Dea12

+1

As Julien在他的評論中指出,你需要定義一個名爲'best'的變量。這需要在'while'循環之前發生。然後你應該在循環結束的時候改變'best'的值。 –

+0

可以請你看看我修改過的代碼,我讓它簡單得多,請 – Dea12