2014-01-07 5 views
-2

Я поставил перед вами аналогичный вопрос и получил быстрый ответ, но я просто начинаю новичок и не смог его адаптировать к тому, что мне нужно.Изменение данных на основе условий в R

В основном я хочу взять код ниже (говорит, что если Date_Index между двумя числами и ФР < X, затем включите ДФ в Y) и сделать это так, это относится только к записям, которые отвечают определенным критериям, а именно:

ИМЕЮТ: df[df$Date_Index >= 50 & df$Date_Index <= 52 & df < .0000001]=1

ADD: if df$Date_Index <= 49 AND df = 0.00 ignore the above statement, else execute:

другими словами, мне нужен равнозначно если, то, иначе п. Если Date_Index <= 49 and df = 0, оставить в покое, иначе, если затем Date_Index >=50 and Date Index <= 52 and df < .001 заменить данные (в Дата Индекс строки 50-52) с 1.

Это (простой) набор данных должен проиллюстрировать достаточно:

xx <- matrix(0,52,5) 
xx[,1]=1 
xx[,3]=1 
xx[,5]=1 
xx[50:52,]=0 
xx[,1]=1:52 
xx[50,3]=1 

Так что я d нравится колонка 2 и столбец 4, чтобы остаться все 0, но для нижней части столбца 3 и 5, чтобы продолжать оставаться все 1.

+3

Ваш HAVE не выглядит правильно. Кажется, вы хотели индексировать строки, но вы индексируете элементы. Кроме того, вы не индексируете переменную B, вы просто индексируете * полный * кадр данных (df <.0000001), и вы не ссылаетесь на переменную Y, которую нужно назначить. Вот почему мы просим воспроизводимых примеров, поскольку я не вижу, как HAVE работал даже. Поэтому трудно перейти к следующему шагу и добавить дополнительный пункт. Либо обратитесь к более раннему вопросу, либо добавьте здесь полный, маленький, воспроизводимый пример. –

+1

Я думаю, что вам не хватает части df, которую нужно сравнить. df <.0000001. Также. Будьте очень осторожны с df = 0,0; Надеюсь, вы знаете разницу между df == 0.0 и df = 0. Хороший трюк состоит в том, чтобы написать 0 == df, если у вас есть сомнения –

+0

Извините, не удалось поделиться своим кодом из-за конфиденциальности данных. Я попытался отредактировать исходный вопрос, чтобы объяснить, что мне нужен синтаксис if, then, else , Извините, если я запутался, но я ценю ваше время. – Austin

ответ

0

Я полагаю, что вы ищете это:

xx[xx[,1] >= 50 & xx[,1] <= 52, c(FALSE, !colSums(!xx[xx[,1] <= 49, -1]))] <- 1 
+0

большое спасибо, помощь очень ценится, так как я встаю на скорость с R, постараюсь начать более конкретный в следующий раз. – Austin

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