2015-07-30 1 views
1
startDate="04/01/2015" 
endDate="07/01/2015" 
dateString="04/30/2015 03/21/2015 06/28/2015 12/19/2015" 

Я хочу иметь вычисляемый столбец, который возвращает значение «Да», если все даты в DateString находятся между STARTDATE и ENDDATE, и «Нет» в противном случае.Spotfire TERR скрипт, чтобы проверить, если строка даты находится в пределах диапазона дат

Обратите внимание: dateString может иметь любое количество дат.

Я пытался писать Терр скрипт (возвращаемый тип String):

MyCustomFunction <- function(startDate, endDate, dateString) { 
    v1 <- scan(text=dateString, what='', quiet=TRUE) 
    v2 <- as.Date(v1, '%m/%d/%Y') 
    temp <- v2 >= as.Date(startDate, '%m/%d/%Y') & v2 <= as.Date(endDate,'%m/%d/%Y') 
    ifelse(length(unique(temp))==1, ifelse(unique(temp)==TRUE, test<-as.character(TRUE), test<-as.character(FALSE)), test<-as.character(FALSE)) 
    test 
} 
output <- MyCustomFunction(startDate = input1, endDate = input2, dateString = input3) 

Но это показывает пустой столбец. Может ли кто-нибудь помочь мне с этим? Или предоставить альтернативное решение? Я использую Spotfire версии 6.5

Заранее спасибо.

+0

Что вы подразумеваете под каким-либо количеством дат? Вы имеете в виду разные форматы даты? Или вы имеете в виду, что диапазон дат может отличаться? Также находятся ли датыStrings в столбце строки? – phiver

+0

@phiver Любое число дат, я имел в виду dateString, может быть любым из следующих: «04/30/2015 23/21/2016 28.06.2012» 18.07.2012 «ИЛИ » 04/30/2015 03/21/2015 "ИЛИ " 04/30/2015 03/21/2015 06/28/2015 "OR " 04/30/2015 ".... Форматы даты всегда одинаковы. И да, столбец строки даты имеет строку типа. – ashetty

ответ

1

Я немного скорректировал ваш код. Spotfire устанавливает вход как вектор. Отрегулируйте входы и выходы по своему усмотрению. Я использовал strsplit, потому что я предполагаю, что данные выглядят так. enter image description here

также не требуется назначений внутри вашего оператора ifelse. Вы просто назначаете результат своей переменной. Я протестировал этот код в Spotfire 6.5, и я вернул правильные результаты.

startDate <- "01/01/2015" 
endDate <- "07/01/2015" 

MyCustomFunction <- function(startDate, endDate, dateString) { 
     outcome <- NULL 
     for (i in 1:length(dateString)) { 
     v1 <- strsplit(dateString[i], " ", fixed = TRUE) 
     v2 <- as.Date(unlist(v1), '%m/%d/%Y') 
     temp <- v2 >= as.Date(startDate, '%m/%d/%Y') & v2 <= as.Date(endDate,'%m/%d/%Y') 
     outcome <- c(test, ifelse(length(unique(temp))==1, ifelse(unique(temp)==TRUE, as.character(TRUE), as.character(FALSE)), as.character(FALSE))) 
     } 
     return(outcome) 
} 

output <- MyCustomFunction(startDate, endDate, dateString) 
+0

это работает, но только что выяснилось, что Spotfire занимает много времени, чтобы создать расчетный столбец, вероятно, потому, что есть около 25 000 нечетных записей. Можете ли вы подумать о более быстрой альтернативе? – ashetty

 Смежные вопросы

  • Нет связанных вопросов^_^