删除sparkR中的输入日期

时间:2015-08-03 10:58:34

标签: r sparkr

我有一个DataFrame x。它包含ID和日期。所以

head(x)

给出ID = 1 2 ...和日期=" 2012-05-05" " 2015年1月1日" ...

我想创建一个新的数据集,其中所有ID的日期都高于" 2013-01-01" + P被删除。 P是天,例如P = 3天。

在sparkR中我这样做

newdata <- filter(x, x$Date < as.Date(2013-01-01 + P) )

但是sparkR不接受这个。

2 个答案:

答案 0 :(得分:3)

当你说&#34; sparkR不接受这个&#34;时,你应该详细说明。有错误吗?错误是什么?或者代码运行没有错误,但没有给出所需的结果?在这种情况下,它给了什么?

您有许多相当简单的语法错误。

  • 使用subset,而不是filter。提示:?filter向您显示此功能&#34;将线性过滤应用于单变量时间序列&#34;,其中&#34;过滤&#34;并不意味着在“子集”的意义上过滤,而是在“卷积”的意义上过滤
  • 当您as.Date时,您的日期应该用引号括起来。将P添加到日期,而不是日期构造函数中。作为提示:

    as.Date(2013-01-01)
    Error in as.Date.numeric(2013 - 1 - 1) : 'origin' must be supplied
    

    请注意,这是尝试转换&#39; 2013 - 1 - 1&#39;,即数字 2011.并且它显示as.Date.numeric而您想要提供字符串& #34; 2013-01-01&#34 ;.当你尝试这个时,它可以工作:

    as.Date("2013-01-01")
    # [1] "2013-01-01"
    

    然后添加3和subset。另外,在subset中,您不需要在x$前面提供Date(请参阅?subset):

    subset(x, Date < as.Date("2013-01-01") + 3)
    

故事的道德:发布在提问时收到的所有错误,尝试逐位处理您的代码(如果整行代码不起作用,请尝试将其分解为最有效的位你可以一次解决一个问题。)

答案 1 :(得分:2)

正如@ mathematical.coffee建议的那样,你应该把P放在as.Date之外,但与他说的相反,在SparkR中你应该使用filter,因此以下是工作代码:

# 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)