如何识别属于每个组的记录,同时求和以获得 R 中的计数
How to identify records that belong to each group, while summerising to get the counts in R
我想对 2 个给定列执行分组,计算这些组中有多少行,并存储哪些行 (id) 属于每个组。
以下帮助我分组并获得计数
set.seed(1000)
df <- data.frame(col1= sample(c(1:15), 15, replace = F),
col2=sample(c("aa", "bb","cc"), 15, replace=TRUE),
col3=sample(c('a','b','c','d'), 15, replace=TRUE, prob=c(0.25, 0.25, 0.20, 0.30)))
View(df)
grp<- df%>%
group_by(col2, col3) %>%
summarise(n=n())
如果 col1 存储行 ID,跟踪属于每个组的所有行 ID 的正确方法是什么?
我明白你在追求什么了。试试这个:
library(dplyr)
set.seed(1000)
df <- data.frame(col1= sample(c(1:15), 15, replace = F),
col2=sample(c("aa", "bb","cc"), 15, replace=TRUE),
col3=sample(c('a','b','c','d'), 15, replace=TRUE,
prob=c(0.25, 0.25, 0.20, 0.30)))
grp<-df %>%
group_by(col2, col3) %>%
summarise(n=n(), rows=paste(col1, collapse = ", "))
grp
col2 col3 n rows
(fctr) (fctr) (int) (chr)
aa b 6 5, 1, 15, 13, 8, 3
aa c 1 9
bb a 3 6, 12, 4
bb b 1 2
bb d 1 11
cc c 1 14
cc d 2 7, 10
如果您需要将其分开(如从 df 分离),则只需 rowsByGrp<-grp$rows
并根据需要使用该向量。如果您希望它实际上是一个命名的 list
,那么:
rowsByGrp<-grp$rows
rows.list<-lapply(1:length(rowsByGrp), function(x) rowsByGrp[x])
names(rows.list)<-paste(grp$col2 , grp$col3, sep = "_")
rows.list
$aa_b
[1] "5, 1, 15, 13, 8, 3"
$aa_c
[1] "9"
$bb_a
[1] "6, 12, 4"
$bb_b
[1] "2"
$bb_d
[1] "11"
$cc_c
[1] "14"
$cc_d
[1] "7, 10"
我想对 2 个给定列执行分组,计算这些组中有多少行,并存储哪些行 (id) 属于每个组。
以下帮助我分组并获得计数
set.seed(1000)
df <- data.frame(col1= sample(c(1:15), 15, replace = F),
col2=sample(c("aa", "bb","cc"), 15, replace=TRUE),
col3=sample(c('a','b','c','d'), 15, replace=TRUE, prob=c(0.25, 0.25, 0.20, 0.30)))
View(df)
grp<- df%>%
group_by(col2, col3) %>%
summarise(n=n())
如果 col1 存储行 ID,跟踪属于每个组的所有行 ID 的正确方法是什么?
我明白你在追求什么了。试试这个:
library(dplyr)
set.seed(1000)
df <- data.frame(col1= sample(c(1:15), 15, replace = F),
col2=sample(c("aa", "bb","cc"), 15, replace=TRUE),
col3=sample(c('a','b','c','d'), 15, replace=TRUE,
prob=c(0.25, 0.25, 0.20, 0.30)))
grp<-df %>%
group_by(col2, col3) %>%
summarise(n=n(), rows=paste(col1, collapse = ", "))
grp
col2 col3 n rows
(fctr) (fctr) (int) (chr)
aa b 6 5, 1, 15, 13, 8, 3
aa c 1 9
bb a 3 6, 12, 4
bb b 1 2
bb d 1 11
cc c 1 14
cc d 2 7, 10
如果您需要将其分开(如从 df 分离),则只需 rowsByGrp<-grp$rows
并根据需要使用该向量。如果您希望它实际上是一个命名的 list
,那么:
rowsByGrp<-grp$rows
rows.list<-lapply(1:length(rowsByGrp), function(x) rowsByGrp[x])
names(rows.list)<-paste(grp$col2 , grp$col3, sep = "_")
rows.list
$aa_b
[1] "5, 1, 15, 13, 8, 3"
$aa_c
[1] "9"
$bb_a
[1] "6, 12, 4"
$bb_b
[1] "2"
$bb_d
[1] "11"
$cc_c
[1] "14"
$cc_d
[1] "7, 10"