私は前にこの質問をしてみましたが、あまり言い表せませんでした。これは私がまだ解決していない新しい試みです。条件に基づいて2つ前の行の合計を累積的に加算する列を作成するにはどうすればよいですか?
winners、losers、date、winner_points、およびloser_pointsのデータセットがあります。
各行について、勝者と敗者の2つの新しい列が必要です。これは、これまでに獲得したポイントの数(勝者と敗者の両方)を示します。
例データ:
私はそれがこれまでのようなループのために行うことです解決しましたどのようにwinner_points_sum <- c(0, 0, 1, 3, 1, 3, 5, 3, 5)
loser_points_sum <- c(0, 2, 2, 1, 4, 5, 4, 7, 4)
test_data <- data.frame(winner, loser, date = as.Date(date), winner_points, loser_points, winner_points_sum, loser_points_sum)
:
library(dplyr)
test_data$winner_points_sum_loop <- 0
test_data$loser_points_sum_loop <- 0
for(i in row.names(test_data)) {
test_data[i,]$winner_points_sum_loop <-
(
test_data %>%
dplyr::filter(winner == test_data[i,]$winner & date < test_data[i,]$date) %>%
dplyr::summarise(points = sum(winner_points, na.rm = TRUE))
+
test_data %>%
dplyr::filter(loser == test_data[i,]$winner & date < test_data[i,]$date) %>%
dplyr::summarise(points = sum(loser_points, na.rm = TRUE))
)
}
test_data$winner_points_sum_loop <- unlist(test_data$winner_points_sum_loop)
winner <- c(1,2,3,1,2,3,1,2,3)
loser <- c(3,1,1,2,1,1,3,1,2)
date <- c("2017-10-01","2017-10-02","2017-10-03","2017-10-04","2017-10-05","2017-10-06","2017-10-07","2017-10-08","2017-10-09")
winner_points <- c(2,1,2,1,2,1,2,1,2)
loser_points <- c(1,0,1,0,1,0,1,0,1)
test_data <- data.frame(winner, loser, date = as.Date(date), winner_points, loser_points)
私は出力になりたいです
どのようにこの問題に取り組むべきですか?行番号が足りるとクエリにかなりの時間がかかります。私はAVE関数で詳しく説明しましたが、1つの列でプレイヤーポイントを勝者として合計することはできますが、ポイントを敗者として追加する方法を理解することはできません。
私は 'winner_points_sum'がどうあるべきかを理解していません。それはそれの上の行からすべての 'winner_points'の合計ですか?それを明確にすることはできますか? –
私は全く混乱しています。 '勝者と敗者のポイントはどういう意味ですか?なぜ勝者1と敗者3ですか?どのようにして 'winner_points'と' loser_points'になったのですか?そしてループは何をしますか?これをいくつか明確にしてください。 –
winner_points_sumは、勝者と敗者の両方の前回の試合での勝者ポイントの合計とみなされます。 勝者と敗者はポイントであるIDと同じです。 @MattW @Dピント –