L oop оператор If Else для сравнения суточного увеличения R - PullRequest
1 голос
/ 27 апреля 2020

Ниже приведен фрагмент данных, с которыми я работаю.

Грипп
Позитивный день Всего
1 2 2
2 1 3
3 2 5
4 0 5
5 3 8
6 4 12
7 7 19
8 8 27
9 9 36
10 15 41

Я пытаюсь написать все oop с оператором if / else, чтобы определить, является ли одно значение в столбце Positive «Выше» или «Ниже», чем предыдущее значение. После этого будет создан новый столбец с именем «Тренд» и будет заполнен ряд соответственно «Выше» или «Выше»

 {
if(Flu$Positive[i+1]>Covid$Positive[i]))
   Trend = "Higher"
else
   Trend = "Lower"
   }

Ответы [ 2 ]

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

Вы можете использовать функцию запаздывания, чтобы сделать это следующим образом:

Covid$New <- ifelse(Covid$Positive > lag(Covid$Positive, 1L),"Higher","Lower")

** Обратите внимание, что только с более высокими и более низкими значениями вы не обращаетесь к «То же», что является одним из условий.

Covid <- structure(list(Day = 1:10, Positive = c(1L, 0L, 1L, 0L, 1L, 2L, 
4L, 5L, 7L, 14L), Total = c(1L, 1L, 2L, 2L, 3L, 5L, 9L, 14L, 
21L, 35L)), class = "data.frame", row.names = c(NA, -10L))

Covid$NewCol <- ifelse(Covid$Positive > lag(Covid$Positive, 1L),"Higher","Lower")

print(Covid)
   Day Positive Total    New
1    1        1     1   <NA>
2    2        0     1  Lower
3    3        1     2 Higher
4    4        0     2  Lower
5    5        1     3 Higher
6    6        2     5 Higher
7    7        4     9 Higher
8    8        5    14 Higher
9    9        7    21 Higher
10  10       14    35 Higher
0 голосов
/ 27 апреля 2020

Мы можем использовать diff для создания логического вектора

with(Covid, c("Lower", "Higher")[c(FALSE, diff(Positive) > 0) + 1])
#[1] "Lower"  "Lower"  "Higher" "Lower"  "Higher" "Higher" "Higher" "Higher" "Higher" "Higher"

Если нам нужно al oop, инициируем выходной вектор со значениями 'Lower', затем l oop over последовательность строк, проверьте if текущее значение «Позитивный» больше, чем предыдущие значения строки, присвойте вектор для этой строки «Выше»

v1 <- rep("Lower", nrow(Covid))
for(i in 2:nrow(Covid)) if(Covid$Positive[i] > Covid$Positive[i-1]) v1[i] <- "Higher"
v1
# [1] "Lower"  "Lower"  "Higher" "Lower"  "Higher" "Higher" "Higher" "Higher" "Higher" "Higher"

data

Covid <- structure(list(Day = 1:10, Positive = c(1L, 0L, 1L, 0L, 1L, 2L, 
4L, 5L, 7L, 14L), Total = c(1L, 1L, 2L, 2L, 3L, 5L, 9L, 14L, 
21L, 35L)), class = "data.frame", row.names = c(NA, -10L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...