用于检查日期字符串是否在日期范围内的 Spotfire TERR 脚本
Spotfire TERR script to check if date string is within date range
startDate="04/01/2015"
endDate="07/01/2015"
dateString="04/30/2015 03/21/2015 06/28/2015 12/19/2015"
我想要一个计算列,如果 dateString 中的所有日期都在 startDate 和 endDate 之间,则 return 为 "Yes",否则为 "No"。
请注意:dateString 可以包含任意数量的日期。
我尝试编写一个 TERR 脚本(return 类型字符串):
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
提前致谢。
我稍微调整了你的代码。 Spotfire 将输入设置为矢量。根据需要调整输入和输出。我使用 strsplit 是因为我假设数据看起来像这样。
此外,您的 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)
startDate="04/01/2015"
endDate="07/01/2015"
dateString="04/30/2015 03/21/2015 06/28/2015 12/19/2015"
我想要一个计算列,如果 dateString 中的所有日期都在 startDate 和 endDate 之间,则 return 为 "Yes",否则为 "No"。
请注意:dateString 可以包含任意数量的日期。
我尝试编写一个 TERR 脚本(return 类型字符串):
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
提前致谢。
我稍微调整了你的代码。 Spotfire 将输入设置为矢量。根据需要调整输入和输出。我使用 strsplit 是因为我假设数据看起来像这样。
此外,您的 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)