如何减去DataFrame中的元素

时间:2015-09-08 10:10:59

标签: sparkr

在SparkR中,我有一个DataFrame data包含idamount_spentamount_won

例如,对于id = 1,我们有

head(filter(data, data$id==1))

,输出

1 30 10
1 40 100
1 22 80
1 14 2

到目前为止,我想知道固定ID是否胜过亏损。金额可以忽略。

在R中我可以让它运行但需要时间。假设我们有100个身份证。在R我做了这个

w=c()
for(j in 1:100){
# Making it local for a fixed id 
q=collect(filter(data, data$id==j))
# Checking the difference. 1 means wins and 0 means losses
if( as.numeric(q$amount_won) - as.numeric(q$amount_spent)>0 {
w[j]=1 
}
else{w[j]=0}
}

现在简单地给我1和0以及所有id。在sparkR中,我想以更快的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您想要的,所以请随时要求调整。

df <- data.frame(id = c(1,1,1,1),
                 amount_spent = c(30,40,22,14),
                 amount_won = c(10,100,80,2))

DF <- createDataFrame(sqlContext, df)
DF <- withColumn(DF, "won", DF$amount_won > DF$amount_spent)
DF$won <- cast(DF$won, "integer")

grouped <- groupBy(DF, DF$id)
aggregated <- agg(grouped, total_won = sum(DF$won), total_games = n(DF$won))

result <- withColumn(aggregated, "percentage_won" , aggregated$total_won/aggregated$total_games)

collect(result)

我在DF中添加了一个列,无论ID是否赢得了比他在该行上花费的更多。结果输出了有人玩的游戏数量,他赢得的游戏数量以及他赢得的游戏比例。