1
"長い"データフレームでユーザーIDでグループ化された複数の変数間の差分を計算する方法はありますか?ユーザーIDでグループ化された複数の変数間のデルタの計算
データ形式:
d1 <- data.frame(
id = rep(c(1, 2, 3, 4, 5), each = 2),
purchased = c(rep(c(T, F), 3), F, T, T, F),
product = rep(c("A", "B"), 5),
grade = c(1, 2, 1, 2, 2, 3, 7, 5, 1, 2),
rate = c(10, 12, 10, 12, 12, 14, 22, 18, 10, 12),
fee = rep(c(1, 2), 5))
これは私のラウンドアバウトソリューションです:
dA <- d1 %>%
filter(product == "A")
dB <- d1 %>%
filter(product == "B")
d2 <- inner_join(dA, dB, by = "id", suffix = c(".A", ".B"))
d3 <- d2 %>%
mutate(
purchased = if_else(purchased.A == T, "A", "B"),
dGrade = grade.B - grade.A,
dRate = rate.B - rate.A,
dFee = fee.B - fee.A) %>%
select(id, purchased:dFee)
このすべてがちょうどひどく非効率的で複雑なようです。ここでtidyr::spread
または別のdplyr/tidyr関数が適切ですか? (私は仕事に何かを得ることができませんでした)...