R 如何基于数据集列值获取计数结果
我有以下数据帧:R 如何基于数据集列值获取计数结果,r,count,multiple-columns,R,Count,Multiple Columns,我有以下数据帧: Group User Manager Client Other data1 Other data2 AG TRUE TRUE FALSE a b AG TRUE TRUE FALSE c d JU FALSE FALSE TRUE d e JU TRUE TRUE FALSE f g
Group User Manager Client Other data1 Other data2
AG TRUE TRUE FALSE a b
AG TRUE TRUE FALSE c d
JU FALSE FALSE TRUE d e
JU TRUE TRUE FALSE f g
我想用这样一个结果:
USER MANAGER CLIENT COUNT-AG COUNT-JU
TRUE TRUE FALSE 2 1
FALSE FALSE TRUE 0 1
我只能通过以下方式获得一组或另一组的结果:
f = filter(dataframe, Group == “AG”)
result <- group_by(f,User,Manager) %>%
summarize(count=n())
f=filter(数据帧,组==“AG”)
结果%
汇总(计数=n())
但是我找不到一种方法来计算两组在同一结果中的计数。
有什么想法吗?我们可以使用
spread
fromtidyr
将“Group”也包括在groupby
中,然后将其从“long”改为“wide”
library(dplyr)
library(tidyr)
df1 %>%
group_by(User, Manager, Client, Group) %>%
summarise(Count = n()) %>%
spread(Group, Count, fill=0)%>%
rename(COUNT_AG=AG, COUNT_JU=JU)
# User Manager Client COUNT_AG COUNT_JU
# (lgl) (lgl) (lgl) (dbl) (dbl)
#1 FALSE FALSE TRUE 0 1
#2 TRUE TRUE FALSE 2 1
如果我们使用的是
data.table
,请将'data.frame'转换为'data.table'(setDT(df1)
,并将dcast
与fun.aggregate
一起使用aslength
library(data.table)
dcast(setDT(df1), User+Manager+Client~Group, length)
数据
df1我们可以使用spread
fromtidyr
将“Group”也包括在groupby
中后,再将“Group”从“long”改为“wide”
library(dplyr)
library(tidyr)
df1 %>%
group_by(User, Manager, Client, Group) %>%
summarise(Count = n()) %>%
spread(Group, Count, fill=0)%>%
rename(COUNT_AG=AG, COUNT_JU=JU)
# User Manager Client COUNT_AG COUNT_JU
# (lgl) (lgl) (lgl) (dbl) (dbl)
#1 FALSE FALSE TRUE 0 1
#2 TRUE TRUE FALSE 2 1
如果我们使用的是data.table
,请将'data.frame'转换为'data.table'(setDT(df1)
,并将dcast
与fun.aggregate
一起使用aslength
library(data.table)
dcast(setDT(df1), User+Manager+Client~Group, length)
数据
df1正如我在评论中提到的,您必须使用data.table。这在第一行中完成(+counting by.N)。第二行按照您的要求执行:
library(data.table)
dt = data.table(df1)[, .N, by = .(User,Manager,Client,Group)]
dcast(dt, User+Manager+Client ~ Group, value.var = "N", fill = 0L)
User Manager Client AG JU
1: FALSE FALSE TRUE 0 1
2: TRUE TRUE FALSE 2 1
正如我在评论中提到的,您必须使用data.table。这在第一行中完成(+counting done by.N)。第二行按照您的要求执行:
library(data.table)
dt = data.table(df1)[, .N, by = .(User,Manager,Client,Group)]
dcast(dt, User+Manager+Client ~ Group, value.var = "N", fill = 0L)
User Manager Client AG JU
1: FALSE FALSE TRUE 0 1
2: TRUE TRUE FALSE 2 1
如果您使用data.table,则有一行代码。您必须提供生成data.frame的代码,以便有人向您提供此1行。如果您使用data.table,则有一行代码。您必须提供生成data.frame的代码,以便有人向您提供此1行。我还添加了convert以避免类型转换spread(组,计数,填充=0,转换=TRUE)。谢谢。我还添加了转换以避免类型转换扩散(组,计数,填充=0,转换=TRUE)。谢谢