Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于数据集列值获取计数结果_R_Count_Multiple Columns - Fatal编程技术网

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
from
tidyr
将“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
一起使用
as
length

 library(data.table)
 dcast(setDT(df1), User+Manager+Client~Group, length)
数据
df1我们可以使用
spread
from
tidyr
将“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
一起使用
as
length

 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)。谢谢