我有一个DataFrame x。它包含ID和日期。所以删除火花R中的入口日期
head(x)
给ID = 1个2 ...和日期= “2012-05-05”, “2015年1月1日” ...
我想建立一个新的数据集,其中日期高于“2013-01-01”+ P的所有ID均被删除。例如P是一天,P = 3天。
在sparkR我这样做
newdata <- filter(x, x$Date < as.Date(2013-01-01 + P))
但sparkR不接受这一点。
我有一个DataFrame x。它包含ID和日期。所以删除火花R中的入口日期
head(x)
给ID = 1个2 ...和日期= “2012-05-05”, “2015年1月1日” ...
我想建立一个新的数据集,其中日期高于“2013-01-01”+ P的所有ID均被删除。例如P是一天,P = 3天。
在sparkR我这样做
newdata <- filter(x, x$Date < as.Date(2013-01-01 + P))
但sparkR不接受这一点。
当你说“sparkR不接受这个”时,你应该详细说明。有错误吗?什么是错误?还是代码运行没有错误,但没有给出所需的结果?在这种情况下,它给了什么?
你有一些相当微不足道的语法错误。
subset
而不是filter
。提示:?filter
向您显示此功能“将线性滤波应用于单变量时间序列”,其中“滤波”并不意味着“子集”意义上的滤波器,而是“卷积”意义上的as.Date
,你的日期应该用引号括起来。将P
添加到日期中,而不是日期构造函数中。作为一个暗示:
as.Date(2013-01-01)
Error in as.Date.numeric(2013 - 1 - 1) : 'origin' must be supplied
注意这是试图将“2013 - 1 - 1”,即数 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)
这个故事告诉我们:一切后收到的错误提问的时候,通过尝试工作(如果整行代码无法正常工作,请尝试将其分解为可工作的最小位,以便一次解决一个问题)。
正如@ 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)
感谢您的回应。在sparkR中,我必须在'subset'命令中写入x $ Date而不是Date,否则'Date'找不到。当我使用子集命令时,sparkR告诉我'子集必须是逻辑的'。当我使用“过滤器”命令时,它工作正常。对于我而言,我不知道as.Date(“2013-01-01”)+ 3是以日期为单位加3,而不是以年为单位。 –
干杯,我没有意识到'sparkR'重写了'filter'。 (这就是为什么发布你的问题得到的错误消息是有用的......) –