【发布时间】:2021-09-19 02:57:16
【问题描述】:
假设我有 10 张不同的信用卡,并根据每月的消费模式计算了每张信用卡的奖励积分。
矩阵中的每一行,mat1 代表一张不同的信用卡。 每列是一年中的一个月。
持卡人每月花费 7275 美元。 但是,如果您每年花费超过一定金额,则会受到处罚。每张卡可能有不同的限制和惩罚。
卡的限制和处罚在spend_limit 和penalty 中给出。
每个向量中的第 n 个元素对应于矩阵中的行顺序相同的第 n 个信用卡。
例如,该持卡人的累计消费为:
> cum_spend_v
[1] 7275 14550 21825 29100 36375 43650 50925 58200 65475 72750 80025 87300
消费限额为:
spend_limit <- c(80000, 80000, 200000, 10000, 80000, 6000, 40000, 6000, 4000, NA)
所以对于卡#1 mat1 row1 列 11 和 12 需要调整卡#1 的 700 分罚分:
1 2 3 4 5 6 7 8 9 10 11 12
[1,] 9475.00 9475.00 30725.00 10725.00 10725.00 10725.00 10725.00 10725.00 10725.00 10725.00 10025.00 10025.00
如何使用 R 的应用函数之一执行这些操作?
purrr:map 是不是因为它不直接对矩阵进行操作,所以不在图片范围内?
R 脚本
mat1 <-
structure(c(9475, 8375, 12808.75, 10018.75, 9475, 5337.5, 5583.2995,
5337.5, 5583.2995, 0, 9475, 8375, 12808.75, 10018.75, 9475, 5337.5,
5583.2995, 5337.5, 5583.2995, 0, 30725, 18375, 15308.75, 32518.75,
30725, 12837.5, 15583.2995, 5337.5, 15583.2995, 0, 10725, 8375,
15308.75, 12518.75, 10725, 5337.5, 5583.2995, 5337.5, 5583.2995,
0, 10725, 8375, 15308.75, 12518.75, 10725, 5337.5, 5583.2995,
5337.5, 5583.2995, 0, 10725, 8375, 15308.75, 12518.75, 10725,
5337.5, 5583.2995, 5337.5, 5583.2995, 0, 10725, 8375, 15308.75,
12518.75, 10725, 5337.5, 5583.2995, 5337.5, 5583.2995, 0, 10725,
8375, 15308.75, 12518.75, 10725, 5337.5, 5583.2995, 5337.5, 5583.2995,
0, 10725, 8375, 15308.75, 12518.75, 10725, 5337.5, 5583.2995,
5337.5, 5583.2995, 0, 10725, 8375, 15308.75, 12518.75, 10725,
5337.5, 5583.2995, 5337.5, 5583.2995, 0, 10725, 8375, 15308.75,
12518.75, 10725, 5337.5, 5583.2995, 5337.5, 5583.2995, 0, 10725,
8375, 15308.75, 12518.75, 10725, 5337.5, 5583.2995, 5337.5, 5583.2995,
0), .Dim = c(10L, 12L), .Dimnames = list(NULL, c("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10", "11", "12")))
# Monthly spending
monthly_spend <- 7275
cum_spend_v <- cumsum(rep(monthly_spend, 12))
# Spending limit for different cards
spend_limit <- c(80000, 80000, 200000, 10000, 80000, 6000, 40000, 6000, 4000, NA)
# Penalty for overspending
penalty <- c(700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600)
which(cum_spend_v > spend_limit[1])
【问题讨论】: