Использование R для цикла для обновления значений столбца в кадре данных - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть простой фрейм данных с двумя векторами, «RECORDS» и «FLAG», который выглядит следующим образом:

RECORDS  FLAG
H12434   TRUE
W3211    FALSE
Maa      FALSE
Mab      FALSE
Mac      FALSE 
Mad      FALSE
T1_12    FALSE
H7367    TRUE
R001     FALSE
W4810.5  FALSE
Maa      FALSE
Mab      FALSE
T2_12    FALSE

Я хочу изменить первый TRUE на 1, а все последующие FALSE на 1, когдапоявляется второе значение ИСТИНА, увеличьте счетчик на 1 и измените значение второго ИСТИНА и последующее значение ЛОЖЬ на 2. Таким образом, результат должен выглядеть следующим образом:

RECORDS  FLAG
H12434   1
W3211    1
Maa      1
Mab      1
Mac      1
Mad      1
T1_12    1
H7367    2
R001     2
W4810.5  2
Maa      2
Mab      2
T2_12    2

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

counter = 0
for (i in seq_along(data))
  {
    if(data$flag == TRUE) 
    {
      counter <- counter + 1
      data$flag <- counter
    }
    else
    {
      data$flag <- counter
    }
  }

Я надеялся, что кто-то может помочь мне понять все, что я делаю здесь неправильно.Благодаря.

1 Ответ

0 голосов
/ 04 декабря 2018

Мне не совсем понятно, что вы ищете, но разве это не просто вопрос cumsum?

transform(df, FLAG = cumsum(FLAG))
#   RECORDS FLAG
#1   H12434    1
#2    W3211    1
#3      Maa    1
#4      Mab    1
#5      Mac    1
#6      Mad    1
#7    T1_12    1
#8    H7367    2
#9     R001    2
#10 W4810.5    2
#11     Maa    2
#12     Mab    2
#13   T2_12    2

Или использование dplyr

library(dplyr)
df %>% mutate(FLAG = cumsum(FLAG))

Пример данных

df <- read.table(text =
    "RECORDS  FLAG
H12434   TRUE
W3211    FALSE
Maa      FALSE
Mab      FALSE
Mac      FALSE
Mad      FALSE
T1_12    FALSE
H7367    TRUE
R001     FALSE
W4810.5  FALSE
Maa      FALSE
Mab      FALSE
T2_12    FALSE", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...