【问题标题】:How to get count results based on a dataset column values如何根据数据集列值获取计数结果
【发布时间】:2016-02-11 07:43:37
【问题描述】:

我有以下数据框:

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())

但我无法找到一种方法来计算同一结果中两组的计数。 有什么想法吗?

【问题讨论】:

  • 如果你使用 data.table 有一个 1-liner。您必须提供生成 data.frame 的代码,以便有人给您这 1 行

标签: r count multiple-columns


【解决方案1】:

group_by 中也包含“组”后,我们可以使用tidyr 中的spread 将“长”格式重塑为“宽”格式。

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),并使用dcastfun.aggregate 作为length

 library(data.table)
 dcast(setDT(df1), User+Manager+Client~Group, length)

数据

 df1 <- structure(list(Group = c("AG", "AG", "JU", "JU"), 
 User = c(TRUE, 
 TRUE, FALSE, TRUE), Manager = c(TRUE, TRUE, FALSE, 
 TRUE), Client = c(FALSE, 
 FALSE, TRUE, FALSE), Other_data1 = c("a", "c", "d", 
 "f"), Other_data2 = c("b", 
 "d", "e", "g")), .Names = c("Group", "User", "Manager", 
 "Client", 
 "Other_data1", "Other_data2"), class = "data.frame", 
 row.names = c(NA, -4L))

【讨论】:

  • 我还添加了 convert 以避免类型转换传播(Group,Count,fill = 0,convert = TRUE)。谢谢
【解决方案2】:

正如我在评论中提到的,您必须使用 data.table。这是在第一行完成的(+ 由 .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

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 2014-01-09
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多