2013-10-11 48 views
1

我已經看到了這方面的一些線索,並制定了一個半答案,但我需要的是與我所看到的略有不同。我正在尋找一行符合某些條件的行。這顯然是在其本身的條件,但我不知道如何制定其在R.我到目前爲止的代碼是:R:查找符合條件的行

index = decisionMatrix[,1] == 1 & decisionMatrix[,9] == 1 
decisionMatrix[index,7] = .01 

,它的值0.01分配給7列,以滿足行該條件。我還想讓所選行下方的第7列= 0.1。

任何幫助將不勝感激!
謝謝
Mike

回答

3

也許與which

index <- which(decisionMatrix[,1] == 1 & decisionMatrix[,9] == 1) 
## Shift indices by 1 
index <- index+1 
## Remove an index that would be greater than the number of rows 
index <- index[index<=nrow(decisionMatrix)] 
decisionMatrix[index,7] <- .01 

編輯:繼SimonO101評論,如果你想修改這兩個匹配條件和下面的行中的行,你只需要更換:

index <- index+1 

通過:

index <- c(index, index+1) 
+0

@ SimonO101 Arf,由於後面的編輯有一個明顯的錯誤(重複索引+ 1),抱歉。 – juba

+1

我認爲這是正確的,除了我認爲'索引'需要'索引< - C(索引,索引+ 1)'所以你得到所有行*和*下面的行... –

+0

@ SimonO101你'右鍵,作爲編輯添加。 – juba

0

R中的子集使用邏輯向量。這意味着您可以將邏輯向量移位一個位置。例如:

set.seed(42) 
DF <- data.frame(x=1:10, y=rnorm(10)) 
#  x   y 
# 1 1 1.37095845 
# 2 2 -0.56469817 
# 3 3 0.36312841 
# 4 4 0.63286260 
# 5 5 0.40426832 
# 6 6 -0.10612452 
# 7 7 1.51152200 
# 8 8 -0.09465904 
# 9 9 2.01842371 
# 10 10 -0.06271410 

ind <- DF$y < 0 
#Shift by one position: 
ind <- c(FALSE, head(ind,-1)) 
DF[ind,] 
# x   y 
#3 3 0.3631284 
#7 7 1.5115220 
#9 9 2.0184237