2013-10-11 2 views
1

Я видел несколько потоков на этом и сформулировал полуответ, но то, что мне нужно, немного отличается от того, что я видел. Я ищу, чтобы найти строку НИЖЕ строки, которая соответствует определенным условиям. То есть, очевидно, условие и само по себе, но я не знаю, как сформулировать его в R. Код у меня до сих пор:R: Поиск строк, удовлетворяющих условиям

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

, который присваивает значение 0,01 в столбце 7 строк, которые соответствуют это состояние. Я также хотел бы сделать столбец 7 строки ниже выбранных строк = 0,1.

Любая помощь была бы принята с благодарностью!
Благодаря
Майк

ответ

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 

EDIT: После SimonO101 комментарий, если вы хотите изменить как строки, соответствующие условия и ниже строки, вы просто должны заменить:

index <- index+1 

By:

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

@ SimonO101 Arf, была очевидная ошибка (дублированный 'индекс + 1') из-за более позднего редактирования, извините. – juba

+1

Я думаю, что это правильно, за исключением того, что я считаю, что 'index' должен быть' index <- c (index, index + 1) ', поэтому вы получаете все строки * и * строки ниже ... –

+0

@ SimonO101 You ' re right, добавлено в качестве редактирования. – 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 
Смежные вопросы

 Смежные вопросы