【发布时间】:2018-08-13 10:50:15
【问题描述】:
我想做一个函数,我可以指定哪一列应该是锚点,或者计算的基础。
set.seed(123)
library(data.table)
dt = data.table(Acc_ID = c(1:50),
P1 = sample((0:10000), 50, replace = T),
P2 = sample((0:10000), 50, replace = T),
P3 = sample((0:10000), 50, replace = T),
P4 = sample((0:10000), 50, replace = T),
P5 = sample((0:10000), 50, replace = T),
P6 = sample((0:10000), 50, replace = T),
P7 = sample((0:10000), 50, replace = T),
P8 = sample((0:10000), 50, replace = T),
P9 = sample((0:10000), 50, replace = T),
P10 = sample((0:10000), 50, replace = T),
P11 = sample((0:10000), 50, replace = T),
P12 = sample((0:10000), 50, replace = T))
最终结果应如下所示:
dt[, `:=` (sumcoll1m = `P12`,
sumcoll3m = rowSums(dt[, `P10`:`P12`]),
sumcoll6m = rowSums(dt[, `P7`:`P12`]),
sumcoll12m = rowSums(dt[, `P1`:`P12`]),
payments1m = ifelse(dt[, `P12`] > 0, 1, 0),
payments3m = rowSums(dt[, `P10`:`P12`] > 0),
payments6m = rowSums(dt[, `P7`:`P12`] > 0),
payments12m = rowSums(dt[, `P1`:`P12`] > 0))]
在本例中,锚点是 P12,但它可以是任何名称,也可以是不同的名称。我想要的是无论锚点是什么都具有相同的间隔长度 - 除了如果锚点是 P1,那么它只会在适用的地方进行计算。
有没有聪明的方法来做到这一点?
提前感谢您!
编辑:是的,它表示月份。 P5 的预期结果是:
dt[, `:=` (sumcoll1m = `P5`,
sumcoll3m = rowSums(dt[, `P3`:`P5`]),
payments1m = ifelse(dt[, `P5`] > 0, 1, 0),
payments3m = rowSums(dt[, `P3`:`P5`] > 0))]
这就是我现在的位置:
dt[, `:=` (sumcoll1m = `P12`,
sumcoll3m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 2)), with = F]),
sumcoll6m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 5)), with = F]),
sumcoll12m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 11)), with = F]),
payments1m = ifelse(dt[, `P12`] > 0, 1, 0),
payments3m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 2)), with = F] > 0),
payments6m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 5)), with = F] > 0),
payments12m = rowSums(dt[, c(which(names(dt) == "P12") - seq(0, 11)), with = F] > 0))]
【问题讨论】:
-
你考虑过从宽幅到长幅重塑吗?
-
@Uwe,感谢您的回复。我考虑过,但我认为这不会使问题变得更容易(如果我错了,请纠正我)。我在想更多的东西,使用哪个函数来确定列 id,然后从该 id 中减去以获得间隔,但还没有弄清楚。
-
列是否表示月份?仅从 P 列的数量得出结论。另外,请edit您的 Q 并显示锚点的预期结果,例如 P5,以确保我完全理解您的逻辑。那么
sumcoll6mP1 到 P5 列的行总和呢?
标签: r function data.table