【发布时间】:2021-08-03 19:16:43
【问题描述】:
我有一个包含大约 60 个变量(A、B、C、D、...)的数据集,每个变量都有 3 个对应的信息列(A、Group_A 和 WOE_A),如下表所示:
ID A Group_A WOE_A B Group_B WOE_B C Group_C WOE_C D Group_D WOE_D Status
213 0 1 0.87 0 1 0.65 0 1 0.80 915.7 4 -0.30 1
321 12 5 0.08 4 4 -0.43 6 5 -0.20 85.3 2 0.26 0
32 0 1 0.87 0 1 0.65 0 1 0.80 28.6 2 0.26 1
13 7 4 -0.69 2 3 -0.82 4 4 -0.80 31.8 2 0.26 0
43 1 2 -0.04 1 2 -0.49 1 2 -0.22 51.7 2 0.26 0
656 2 3 -0.28 2 3 -0.82 2 3 -0.65 8.5 1 1.14 0
435 2 3 -0.28 0 1 0.65 0 1 0.80 39.8 2 0.26 0
65 8 4 -0.69 3 4 -0.43 5 4 -0.80 243.0 3 0.00 0
565 0 1 0.87 0 1 0.65 0 1 0.80 4.0 1 1.14 0
432 0 1 0.87 0 1 0.65 0 1 0.80 81.6 2 0.26 0
我想在 R 中打印一个包含一些统计信息 (Min(A), Max(A), WOE_A, Count(Group_A), Count(Group_A, where Status=1), Count(Group_A, where Status=0)) 的表格,所有这些统计信息都按 Group 为 60 个变量中的每一个进行分组,我想我需要在循环中执行它。
我尝试了“dplyr”包,但我不知道如何引用与变量 (A) 相关的所有三列(A、Group_A 和 WOE_A)以及如何汇总所有所需统计信息的信息。
我开始的代码是:
df <- data
List <- list(df)
for (colname in colnames(df)) {
List[[colname]]<- df %>%
group_by(df[,colname]) %>%
count()
}
List
这就是我想要打印结果的方式:
**Var A
Group Min(A) Max(A) WOE_A Count(Group_A) Count_1(Group_A, where Status=1) Count_0(Group_A, where Status=0)**
1
2
3
4
5
非常感谢!
劳拉
【问题讨论】:
-
当你想要WOE_A时,你的意思是A组的WOA平均值?
-
WOE_A 是每个 A 组对应的唯一值。因此它与 min(WOE_A) 或 Max(WOE_A) 相同。事实上,这是我为每组变量 A 计算的证据权重指标。
-
所以,是的。它也可以计算为每个 A 组的 WOE 平均值。
-
欢迎来到 SO!您的问题之一是您的数据不是tidy。一种解决方案是将您的数据转换为长格式,使用列
ID、Group、WOE、Letter、Status和(比如说)Value,计算您的摘要,然后将摘要转换为广泛的演示。这将消除对循环的需要,因此对于所需分组数量的变化既快速又稳健。 -
我强烈建议按照@Limey 的建议转换为 long 。照原样,您的 data.frame 将在分析的每个步骤中挑战您,为一些非常讨厌(和不必要的)代码做好准备
标签: r loops dplyr statistics grouping