删除 sparkR 中的条目日期
Removing entry Date in sparkR
我有一个 DataFrame x。它包含 ID 和日期。所以
head(x)
给出 ID = 1 2 ... 和日期 = "2012-05-05" "2015-01-01" ...
我想创建一个新的数据集,其中删除了所有日期高于“2013-01-01”+ P 的 ID。 P 是天,例如 P = 3 天。
我在 sparkR 中这样做
newdata <- filter(x, x$Date < as.Date(2013-01-01 + P) )
但是 sparkR 不接受这个。
当你说"sparkR does not accept this"时,你应该详细说明。有错误吗?错误是什么?或者代码 运行 没有错误,但没有给出所需的结果?在这种情况下,它给出了什么?
你有一些相当微不足道的语法错误。
- 使用
subset
,而不是 filter
。提示:?filter
告诉你这个函数 "applies linear filtering to a univariate time series",其中 "filtering" 不是 'subset' 意义上的过滤器,而是 'convolution'
当您 as.Date
时,您的日期应该用引号引起来。将 P
添加到日期,而不是在日期构造函数中。作为提示:
as.Date(2013-01-01)
Error in as.Date.numeric(2013 - 1 - 1) : 'origin' must be supplied
请注意,这是试图转换“2013 - 1 - 1”,即 number 2011。它说 as.Date.numeric
而你想提供字符串“ 2013-01-01”。当你尝试这个时,它起作用了:
as.Date("2013-01-01")
# [1] "2013-01-01"
然后加上你的 3 和 subset
。顺便说一句,在 subset
中,您不需要在 Date
前面提供 x$
(参见 ?subset
):
subset(x, Date < as.Date("2013-01-01") + 3)
故事的寓意:post 提出问题时收到的所有错误,请尝试一点一点地完成您的代码(如果整行代码都不起作用,请尝试将其分解为最小的代码有用的位,因此您可以一次解决一个问题。
正如@mathematical.coffee所建议的那样,你应该把 P 放在 as.Date 之外,但与他所说的相反,在 SparkR 中你应该使用过滤器,因此以下是工作代码:
# Create x and set it to a data
x2 <- data.frame(ID=c(1,2),
Date=c("2012-05-05","2015-01-01"))
x2$Date <- as.Date(x2$Date)
x <- createDataFrame(sqlContext,x2)
# set P and compare the dates
P <- 2
newdata <- filter(x, x$Date < (as.Date("2013-01-01")+P) )
# See the first results (in my example only one row)
head(newdata)
我有一个 DataFrame x。它包含 ID 和日期。所以
head(x)
给出 ID = 1 2 ... 和日期 = "2012-05-05" "2015-01-01" ...
我想创建一个新的数据集,其中删除了所有日期高于“2013-01-01”+ P 的 ID。 P 是天,例如 P = 3 天。
我在 sparkR 中这样做
newdata <- filter(x, x$Date < as.Date(2013-01-01 + P) )
但是 sparkR 不接受这个。
当你说"sparkR does not accept this"时,你应该详细说明。有错误吗?错误是什么?或者代码 运行 没有错误,但没有给出所需的结果?在这种情况下,它给出了什么?
你有一些相当微不足道的语法错误。
- 使用
subset
,而不是filter
。提示:?filter
告诉你这个函数 "applies linear filtering to a univariate time series",其中 "filtering" 不是 'subset' 意义上的过滤器,而是 'convolution' 当您
as.Date
时,您的日期应该用引号引起来。将P
添加到日期,而不是在日期构造函数中。作为提示:as.Date(2013-01-01) Error in as.Date.numeric(2013 - 1 - 1) : 'origin' must be supplied
请注意,这是试图转换“2013 - 1 - 1”,即 number 2011。它说
as.Date.numeric
而你想提供字符串“ 2013-01-01”。当你尝试这个时,它起作用了:as.Date("2013-01-01") # [1] "2013-01-01"
然后加上你的 3 和
subset
。顺便说一句,在subset
中,您不需要在Date
前面提供x$
(参见?subset
):subset(x, Date < as.Date("2013-01-01") + 3)
故事的寓意:post 提出问题时收到的所有错误,请尝试一点一点地完成您的代码(如果整行代码都不起作用,请尝试将其分解为最小的代码有用的位,因此您可以一次解决一个问题。
正如@mathematical.coffee所建议的那样,你应该把 P 放在 as.Date 之外,但与他所说的相反,在 SparkR 中你应该使用过滤器,因此以下是工作代码:
# Create x and set it to a data
x2 <- data.frame(ID=c(1,2),
Date=c("2012-05-05","2015-01-01"))
x2$Date <- as.Date(x2$Date)
x <- createDataFrame(sqlContext,x2)
# set P and compare the dates
P <- 2
newdata <- filter(x, x$Date < (as.Date("2013-01-01")+P) )
# See the first results (in my example only one row)
head(newdata)