【发布时间】:2015-08-20 12:12:02
【问题描述】:
我在使用一个讨厌的命令来分析摘要时遇到问题,为此我使用了dplyr 包。用一些示例数据最容易解释:
structure(list(Date = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L),
Name = structure(c(3L, 3L, 4L, 3L, 2L, 3L, 2L, 4L, 1L), .Label = c("George",
"Jack", "John", "Mary"), class = "factor"), Birth.Year = c(1995L,
1995L, 1997L, 1995L, 1999L, 1995L, 1999L, 1997L, 1997L),
Special_Balance = c(10L, 40L, 30L, 5L, 10L, 15L, 2L, 1L,
100L), Total_Balance = c(100L, 100L, 50L, 200L, 20L, 200L,
20L, 100L, 1600L)), .Names = c("Date", "Name", "Birth.Year",
"Special_Balance", "Total_Balance"), class = "data.frame", row.names = c(NA,
-9L))
两个简单的总结是我的目标:首先,我想通过Date 进行总结,代码如下所示。错误的部分是total_balance_sum 计算,我想对每个人的余额求和,但每个人只计算一次。例如,我对Date=1 的命令的结果是total_balance_sum=100,但它应该是150(将Jack 的total_balance 100 一次添加到50 的Mary 的total_balance 一次)。这个错误的计算显然弄乱了最终的pct calc。
example_data %>%
group_by(Date) %>%
summarise(
total_people=n_distinct(Name),
total_loan_exposures=n(),
special_sum=sum(Special_Balance,na.rm=TRUE),
total_balance_sum=sum(Total_Balance[n_distinct(Name)]),
total_pct=special_sum/total_balance_sum
) -> example_summary
在第二个摘要(如下)中,我按日期和出生年份分组,再次错误地计算 total_balance_sum。
example_data %>%
group_by(Date,Birth.Year) %>%
summarise(
total_people=n_distinct(Name),
total_loan_exposures=n(),
special_sum=sum(Special_Balance,na.rm=TRUE),
total_balance_sum=sum(Total_Balance[n_distinct(Name)]),
total_pct=special_sum/total_balance_sum
) -> example_summary_birthyear
实现目标的正确方法是什么?显然,我正在使用的 n_distinct 只取其中一个值,而不是在名称之间正确地求和。
感谢您的帮助。
【问题讨论】:
-
你也能显示你想要的输出吗?