Условные выражения: выбор / назначение переменной для строки - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть набор данных с 2 VP и 350 значениями интервалов для каждого. Я пишу if l oop, чтобы выбрать, когда минимальное значение VP1 перекрывается с максимальным значением VP2.

Данные обычно сортируются по VP, но я организовал сортировку по минимуму, поскольку это временные рамки.

Я запустил следующий код, который работал для назначения 0 или 1, когда значения перекрывают предыдущий элемент, но он не учитывает, что является предыдущим элементом (ie. Независимо от того, является ли предыдущий элемент VP1 или VP2 ).

  for (i in 2:length(df$newvariable)) {
      if (df$minimum[i] < df$maximum[i-1]){
        df$newvariable[i] <- 0
      } else {
        df$newvariable[i] <- 1
      }
   }

Я хочу сказать if df$minimum[i] of VP1 < df$maximum[i] of VP2, then df$newvariable = 0. Otherwise, df$newvariable = 1.

Я не смог найти, как сделать его условным для каждой строки и l oop снова. У кого-нибудь есть рекомендации?

Большое спасибо.

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

    VP  xmin  xmax 
    1       0     6
    2       0     2
    2       6     14
    1       14    24
    2       20    30
    1       30    36

... и т. Д. Для примерно 600 строк.

Желаемый результат:

   VP    xmin  xmax  newvariable
    1       0     6           -
    2       0     2           0
    2       6     14          1
    1       14    24          1
    2       20    30          0
    1       30    36          1

Если я у меня есть фрейм данных, в котором была другая переменная, и я выделил поднабор, чтобы рассматривать только одну часть переменной. Например, переменная = говорящий, и назначения 1 (да) или 0 (нет). Первоначально я выбрал только просмотр 0 и создание новых переменных, таких как quiet_together. Тем не менее, я хочу собрать эти кадры данных вместе, но добавил столбцы в отдельных кадрах данных. Если я хочу точно такую ​​же вещь, как описано выше, но с кадром данных вместе (вместо двух отдельных), как бы я указал для каждой назначенной переменной? Я хочу закончить двумя новыми столбцами, основанными на значениях xmin и xmax, учитывая значение в говорящей переменной. Новые столбцы будут talk_together (для значения 1 говорящей переменной) и quiet_together (для значения 0 говорящей переменной, когда xmin <= xmax для предыдущей строки. </p>

Например:

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

    VP  xmin  xmax    talking 

    1       0     6       0

    2       0     2       0

    2       2     6       1

    2       6     14      0

    1       6     14      1 

    2       14    24      1     

    1       14    20      0

    1       20    30      1

    2       24    32      0

    1       30    32      0

... И так далее для 600 строк или около того.

Желаемый результат:

    VP  xmin  xmax    talking  talk_together  quiet_together

    1       0     6       0            0            0

    2       0     2       0            0            0  

    2       2     6       1            0            0

    2       6     14      0            0            0

    1       6     14      1            0            0 

    1       14    20      0            0            0     

    2       14    24      1            1            0

    1       20    30      1            1            0

    2       24    32      0            0            1

    1       30    32      0            0            1

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

С data.table мы можем сделать

library(data.table)
setDT(df)[, newvariable := as.integer(xmin >= shift(xmax))]
0 голосов
/ 18 апреля 2020

Вы можете использовать lag из dplyr для сравнения с предыдущим значением xmax.

library(dplyr)
df %>% mutate(newvariable = as.integer(xmin >= lag(xmax)))

#  VP xmin xmax newvariable
#1  1    0    6          NA
#2  2    0    2           0
#3  2    6   14           1
#4  1   14   24           1
#5  2   20   30           0
#6  1   30   36           1

или shift с data.table

library(data.table)
setDT(df)[, newvariable := +(xmin >= shift(xmax))]

Варианты базы R:

df$newvariable <- as.integer(c(NA, df$xmin[-1] >= df$xmax[-nrow(df)]))

и

df$newvariable <- +c(NA, tail(df$xmin, -1) >= head(df$xmax, -1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...