Пока печать большого набора данных некорректна - PullRequest
0 голосов
/ 15 января 2019

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

В настоящее время я использую цикл while для итерации по моему набору данных. Если конечной датой клиента является NA, к вектору s добавляется «NA». Если дата окончания больше даты начала, она вычитает их и добавляет это число к s. Наконец, если начальная дата и конечная дата равны, это добавляет 1 к вектору s.

Первая пара значений, которые я должен иметь в векторе s: NA, 1,1, NA, 2,1,2.

Тем не менее, мой цикл while в настоящее время возвращает: 1, NA, 1, 1, NA, 1,1.

Что не так в моей логике цикла while?

Первая пара значений моего набора данных:

a(first)  b(last)
2         NA
3         3
3         3
4         NA
4         5
2         2
2         3

Мой код выглядит следующим образом:

x <- 1
while (x <= 2132)
{
  if (is.na(b[x])) 
  {
     s <- c(s,'NA')
  }
  else if(a[x] < b[x])
  {
     s <- c(s,(b[x] - a[x]) + 1)
  }
  else if (a[x] == b[x])
  {
     s <- c(s,1)
  }
  x = x + 1
}   

1 Ответ

0 голосов
/ 15 января 2019

Вам не нужно использовать цикл for или while здесь. Основным клиентом R-программирования является концепция векторизации.

Короче говоря, вы можете реализовать всю свою логику одновременно. Для этого я бы использовал две ifelse() функции:

d <- data.frame(a = c(2,3,3,4,4,2,2), b = c(NA, 3,3,NA,5,2,3))
d$s <- with(d, ifelse(is.na(b), NA, ifelse(b > a, b -a + 1, 1)))
d
#>   a  b  s
#> 1 2 NA NA
#> 2 3  3  1
#> 3 3  3  1
#> 4 4 NA NA
#> 5 4  5  2
#> 6 2  2  1
#> 7 2  3  2

Создано в 2019-01-14 пакетом Представление (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...