R & mdash; Создание векторов непрерывных прогонов дат из большого вектора [дубликат]

Это решение также решает как сетевую ошибку, так и службу за сервером sql

. Я ответил на аналогичный вопрос здесь, вам нужно указать другой open Run type-> services.msc - под услугами -> sort by stopped, который вы увидите куча остановленных служб SQL Right click and start

Чтобы начать - есть 4 проблемы, которые могут вызвать ошибки common LocalDb SqlExpress Sql Server [41], прежде чем вы начнете необходимо переименовать v11 или v12 в (localdb) \ mssqllocaldb

Я обнаружил, что самый простой должен сделать следующее: я приложил pics и шаги для помощи.

Сначала проверьте, какой экземпляр вы установили, вы можете сделать это, проверив реестр и , выполнив команду cmd

  1. cmd> Sqllocaldb.exe i
  2. cmd> Sqllocaldb.exe s "whicheverVersionYouWantFromListBefore", если этот шаг завершился неудачно, вы можете удалить с помощью опции d cmd> Sqllocaldb .exe d "someDb"
  3. cmd> Sqllocaldb.exe c "createSomeNewDbIfyouWantDb"
  4. cmd> Sqllocaldb.exe start "createSomeNewDbIfyouWantDb"

13
задан Henrik 29 January 2017 в 13:49
поделиться

2 ответа

Вы можете легко определить точки разреза:

which(diff(v) != 1)

Исходя из этой попытки:

v <- c(1,3,4,5,9,10,17,29,30)
cutpoints <- c(0, which(diff(v) != 1), length(v))
ragged.vector <- vector("list", length(cutpoints)-1)
for (i in 2:length(cutpoints)) ragged.vector[[i-1]] <- v[(cutpoints[i-1]+1):cutpoints[i]]

В результате:

> ragged.vector
[[1]]
[1] 1

[[2]]
[1] 3 4 5

[[3]]
[1]  9 10

[[4]]
[1] 17

[[5]]
[1] 29 30

Этот алгоритм не очень приятный, но вы можете написать много более аккуратного кода на основе diff :) Удачи!

3
ответ дан daroczig 18 August 2018 в 15:10
поделиться

Вы можете создать data.frame и назначить элементы для групп с помощью diff, ifelse и cumsum, затем сгенерировать с помощью tapply:

v.df <- data.frame(v = v)
v.df$group <- cumsum(ifelse(c(1, diff(v) - 1), 1, 0))
tapply(v.df$v, v.df$group, function(x) x)

$`1`
[1] 1

$`2`
[1] 3 4 5

$`3`
[1]  9 10

$`4`
[1] 17

$`5`
[1] 29 30
4
ответ дан Henrik 18 August 2018 в 15:10
поделиться
  • 1
    да, это намного более аккуратный способ! :) Я не знал о split, спасибо, что обратил мое внимание на эту полезную функцию. – daroczig 7 March 2011 в 17:46
  • 2
    Вау! Я бы не догадался, что это будет иметь такое значение. – Aaron 5 May 2011 в 05:37
  • 3
    Томми, я понял, почему это было быстрее и отредактировал ваш пост, чтобы добавить его. Я не уверен, что это правильный этикет; надеюсь, вы не против. (Кроме того, он должен быть проверен экспертами, поэтому, если вы не увидите его сразу, вот почему.) – Aaron 5 May 2011 в 22:04
  • 4
    По-видимому, мое редактирование было отклонено; Я добавил тайминги к моему ответу. – Aaron 13 May 2011 в 17:16
  • 5
    Следует отметить, что при использовании as.integer следует соблюдать осторожность при возврате усеченного значения, которое может не быть тем, что вы хотите, когда числовое число было создано с арифметикой с плавающей запятой, например as.integer(0.3*3+0.1) возвращает 0. – Aaron 13 May 2011 в 17:28
  • 6
    Можете ли вы объяснить, что делает функция diff () и как она работает? Официальная документация не помогла мне это понять. – OnlyDean 21 June 2018 в 14:34
  • 7
    Он просто вычисляет различия между терминами. Помощь, возможно, запутанна, потому что она более общая, чем эта, поскольку она допускает различные задержки, а процесс повторяется, для двойной разницы (различия различий) и т. Д. – Aaron 21 June 2018 в 14:56
Другие вопросы по тегам:

Похожие вопросы: