2015-09-08 3 views
0

В SparkR У меня есть DataFrame data содержит id, amount_spent и amount_won.Как вычесть элементы в DataFrame

Например, для ид = 1 мы имеем

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

и выход

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

До сих пор я хочу знать, если фиксированный идентификатор более выиграл, чем потери. Сумма может быть проигнорирована.

В 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} 
} 

Теперь w просто дает мне 1 и 0 для всех идентификаторов. В sparkR я хочу сделать это более быстрым способом.

ответ

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 больше, чем он потратил на эту строку. В результате получается количество игр, в которые кто-то играл, количество выигранных игр и процент выигранных игр.

+0

Да, это имеет смысл. Как подсчитать общее количество выигранных = ЛОЖЬ и ИСТИННО? –

+0

Подсчитано общее количество игр, всего выигранных игр и процент выигранных игр. –

Смежные вопросы