代码之家  ›  专栏  ›  技术社区  ›  Marco C

在多个变量上具有特定值的组数

  •  2
  • Marco C  · 技术社区  · 6 年前

    我有一个数据框,例如:

    city <- c("a","a","b","b","c","c","c","c","d","e","e","f") 
    x <- c(0,0,0,1,1,1,0,0,0,1,1,1)
    y <- c(1,1,0,0,0,1,1,0,0,1,0,1)
    z <- c(1,0,0,0,0,0,0,0,0,0,1,0)
    k <- c(1,1,0,0,0,1,0,0,1,0,0,0)
    df <- data.frame(city, x, y, z, k) 
    

    其中有一个分组变量(例如城市)和几个虚拟变量。我想计算一下有多少城市的每个虚拟变量=1。

    到目前为止,我所做的是计算有多少城市有一个特定的虚拟值=1:

    > n_groups(filter(df, x == 1) %>% 
    +            group_by(city))
    [1] 4
    

    但是,我想知道是否有可能对我的数据帧中的所有虚拟对象执行此操作,以便获得如下内容:

    var count 
     x   4
     y   4
     z   2
     k   3
    

    其中,我有城市的数量,每个虚拟变量等于1(计数列),而不必对我的样本中的所有虚拟变量分别进行计算。

    谢谢你的帮助!

    3 回复  |  直到 6 年前
        1
  •  5
  •   Zheyuan Li    6 年前

    R基:

    colSums(rowsum(df[, -1], df[, 1]) > 0)
    
    #x y z k 
    #4 4 2 3 
    
        2
  •  2
  •   h3rm4n    6 年前

    dplyr tidyr 以下内容:

    library(dplyr)
    library(tidyr)
    
    df %>% 
      gather(k, v, -1) %>% 
      filter(v == 1) %>% 
      group_by(k) %>% 
      summarise(cnt = n_distinct(city))
    

    结果是:

    # A tibble: 4 x 2
      k       cnt
      <chr> <int>
    1 k         3
    2 x         4
    3 y         4
    4 z         2
    
        3
  •  1
  •   s_baldur    6 年前

    使用 data.table 以下内容:

    library(data.table)
    setDT(df)
    df[, lapply(.SD, max), city][, colSums(.SD), .SDcols = -1]
    x y z k 
    4 4 2 3