2016-04-05 11 views
1
にデータフレームにgroupedDataを変換することができ

は、私は私はそれがたAccountIdに基づいて、その後、私はCloseDateに違いが含まれています別の列の命名date_diffを追加するグループにしたいデータフレームはどのように私はR

AccountId,CloseDate 
1,2015-05-07 
2,2015-05-09 
3,2015-05-01 
4,2015-05-07 
1,2015-05-09 
1,2015-05-12 
2,2015-05-12 
3,2015-05-01 
3,2015-05-01 
3,2015-05-02 
4,2015-05-17 
1,2015-05-12 

下記持って考えてみましょう現在行と前行の間。このDate_diffは、同じAccountIdを持つ行に対してのみ計算されることを覚えておいてください。だから私は、別の列の下

を追加する前に、グループにデータを必要とする私はのmutateを使用しています別の列を追加するには

df <- read.df(sqlContext, "/home/ubuntu/work/csv/sample.csv", source = "com.databricks.spark.csv", inferSchema = "true", header="true") 
    df$CloseDate <- to_date(df$CloseDate) 
    groupedData <- SparkR::group_by(df, df$AccountId) 
    SparkR::mutate(groupedData, DiffCloseDt = as.numeric(SparkR::datediff((CloseDate),(SparkR::lag(CloseDate,1))))) 

を使用していますRコードです。しかしgroup_byがgroupedDataを返すので、ここでmutateを使用することはできません。私は以下のエラーを受けています

Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function ‘mutate’ for signature ‘"GroupedData"’ 

私はどのように私はmutateを使用して列を追加できるようにGroupedDataをDataframeに変換できますか?

答えて

3

group_byを使用してご希望の内容を達成することはできません。 DataFrameない物理グループの

group_byデータ:すでに述べたようにSO上のかなりの数回を説明しました。さらに、group_byの適用後の操作の順序は非決定的です。

df <- structure(list(AccountId = c(1L, 2L, 3L, 4L, 1L, 1L, 2L, 3L, 
    3L, 3L, 4L, 1L), CloseDate = structure(c(3L, 4L, 1L, 3L, 4L, 
    5L, 5L, 1L, 1L, 2L, 6L, 5L), .Label = c("2015-05-01", "2015-05-02", 
    "2015-05-07", "2015-05-09", "2015-05-12", "2015-05-17"), class = "factor")), 
    .Names = c("AccountId", "CloseDate"), 
    class = "data.frame", row.names = c(NA, -12L)) 

hiveContext <- sparkRHive.init(sc) 
sdf <- createDataFrame(hiveContext, df) 
registerTempTable(sdf, "df") 

query <- "SELECT *, LAG(CloseDate, 1) OVER (
    PARTITION BY AccountId ORDER BY CloseDate 
) AS DateLag FROM df" 

dfWithLag <- sql(hiveContext, query) 

withColumn(dfWithLag, "diff", datediff(dfWithLag$CloseDate, dfWithLag$DateLag)) %>% 
    head() 

## AccountId CloseDate DateLag diff 
## 1   1 2015-05-07  <NA> NA 
## 2   1 2015-05-09 2015-05-07 2 
## 3   1 2015-05-12 2015-05-09 3 
## 4   1 2015-05-12 2015-05-12 0 
## 5   2 2015-05-09  <NA> NA 
## 6   2 2015-05-12 2015-05-09 3 
:あなたは、ウィンドウ関数を使用して明示的な順序付けを提供する必要があるでしょう所望の出力を達成するために