使用dplyr对多个帐户进行分组
我有一个如下所示的数据帧:使用dplyr对多个帐户进行分组,r,dplyr,R,Dplyr,我有一个如下所示的数据帧: +----+---------+-----------+------------+-------------+ | | A | B | C | D | +----+---------+-----------+------------+-------------+ | 1 | 1306802 | 811-23124 | S000053152 | 29532809 | | 2 | 13068
+----+---------+-----------+------------+-------------+
| | A | B | C | D |
+----+---------+-----------+------------+-------------+
| 1 | 1306802 | 811-23124 | S000053152 | 29532809 |
| 2 | 1306802 | 811-23124 | S000057200 | 191936604 |
| 3 | 1306802 | 811-00537 | NA | 106393284 |
| 4 | 1306802 | 811-00537 | NA | 105092944 |
| 5 | 1306802 | 811-00537 | NA | 10962227335 |
| 6 | 1306802 | 811-04706 | NA | 25249641849 |
| 7 | 1306802 | 811-04706 | NA | 0 |
| 8 | 1306802 | 811-04706 | NA | 23510301799 |
| 9 | 1306802 | 811-04706 | NA | 9477889899 |
| 10 | 1306802 | 811-04894 | NA | 2847314143 |
| 11 | 1306802 | 811-04986 | NA | 0 |
| 12 | 1306802 | 811-04986 | NA | 107804150 |
| 13 | 1306802 | 811-04986 | NA | 257550681 |
| 14 | 1306802 | 811-04986 | NA | 2712807262 |
| 15 | 1306802 | 811-04986 | NA | 2010169002 |
| 16 | 1306802 | 811-05459 | NA | 60121770194 |
| 17 | 1306802 | 811-05583 | NA | 1922165752 |
| 18 | 1306802 | 811-05583 | NA | 2259339058 |
| 19 | 1306802 | 811-05583 | NA | 57707441184 |
| 20 | 1306802 | 811-05583 | NA | 82371244343 |
+----+---------+-----------+------------+-------------+
我需要它看起来像这样,其中A是群,B是不同值的计数,C是不同值的计数,D是和
+---+---------+---+---+--------------+
| | A | B | C | D |
+---+---------+---+---+--------------+
| 1 | 1306802 | 7 | 2 | 281950622292 |
+---+---------+---+---+--------------+
我尝试了以下方法,但只给出了记录计数。我也尝试过使用summary\u all
并指定列函数,但我遇到了错误
result <- data.frame %>%
group_by(A) %>%
summarize(n())
结果%
组别(A)%>%
总结(n())
这可以通过摘要
中的dplyr
>=1.0.0跨来完成,其中我们可以有多个列块,对不同的函数进行摘要。这里,B,C被放置在跨的内,并获得不同值的数量(n_distinct
),同时我们得到'D'的和以及跨的外(按'A'分组后)
库(dplyr)
df1%>%
组别(A)%>%
总结(跨越(B:C,n_distinct,na.rm=TRUE),D=sum(D,na.rm=TRUE))
#一个tibble:1 x 4
#A、B、C、D
#
#1 1306802 7 2 281950622292
数据
df1这可以通过summary
中的dplyr
>=1.0.0中的cross
来完成,其中我们可以有多个列块,对不同的函数进行汇总。这里,B,C被放置在跨的内,并获得不同值的数量(n_distinct
),同时我们得到'D'的和以及跨的外(按'A'分组后)
库(dplyr)
df1%>%
组别(A)%>%
总结(跨越(B:C,n_distinct,na.rm=TRUE),D=sum(D,na.rm=TRUE))
#一个tibble:1 x 4
#A、B、C、D
#
#1 1306802 7 2 281950622292
数据
df1谢谢。我刚刚遇到了n_distinct
函数。下面的摘要是否也这样做<代码>汇总(B=n_distinct(B,na.rm=T),C=n_distinct(C,na.rm=T),D=sum(D,na.rm=T)
你什么时候会使用跨而不是本例?@mdute.是的,它也应该是一样的。感谢na.rm
参数。我没有注意到。更新了。当你有10多列要做摘要时,我会使用跨,写10次相同的函数会花费很多时间time@akrun …为什么需要跨列?@akrun。在使用自定义列名时,是否可以跨列使用X=n_distinct(B,na.rm=T)
。还是您必须键入所有列?@MitchellGraham唯一的原因是它可以扩展为一般情况,正如一个OP所示,在使用具有更多特性的数据集时,它将更加手动。我刚刚遇到了n\u distinct
函数。下面的摘要是否也这样做?s求和(B=n_-distinct(B,na.rm=T),C=n_-distinct(C,na.rm=T),D=sum(D,na.rm=T)
你什么时候会使用跨而不是本例?@mdute.是的,它也应该是一样的。感谢na.rm
参数。我没有注意到。更新了。当你有10多列要做摘要时,我会使用跨,写10次相同的函数会花费很多时间time@akrun …为什么需要跨列?@akrun。在使用自定义列名时,是否可以跨列使用X=n_distinct(B,na.rm=T)
。或者您必须键入所有列吗?@MitchellGraham唯一的原因是,它可以扩展为一般情况,如一个OP所示,在使用具有更多功能的数据集时,将更加手动
library(dplyr)
df1 %>%
group_by(A) %>%
summarise(across(B:C, n_distinct, na.rm = TRUE), D = sum(D, na.rm = TRUE))
# A tibble: 1 x 4
# A B C D
# <int> <int> <int> <dbl>
#1 1306802 7 2 281950622292
df1 <- structure(list(A = c(1306802L, 1306802L, 1306802L, 1306802L,
1306802L, 1306802L, 1306802L, 1306802L, 1306802L, 1306802L, 1306802L,
1306802L, 1306802L, 1306802L, 1306802L, 1306802L, 1306802L, 1306802L,
1306802L, 1306802L), B = c("811-23124", "811-23124", "811-00537",
"811-00537", "811-00537", "811-04706", "811-04706", "811-04706",
"811-04706", "811-04894", "811-04986", "811-04986", "811-04986",
"811-04986", "811-04986", "811-05459", "811-05583", "811-05583",
"811-05583", "811-05583"), C = c("S000053152", "S000057200",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA), D = c(29532809, 191936604, 106393284, 105092944, 10962227335,
25249641849, 0, 23510301799, 9477889899, 2847314143, 0, 107804150,
257550681, 2712807262, 2010169002, 60121770194, 1922165752, 2259339058,
57707441184, 82371244343)), class = "data.frame", row.names = c(NA,
-20L))