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

R 计算在多个变量上具有特定值的组数,r,grouping,R,Grouping,我有一个数据框,例如: 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,

我有一个数据框,例如:

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) 
但是,我想知道是否有可能对我的数据帧中的所有假人执行此操作,以获得如下结果:

var count 
 x   4
 y   4
 z   2
 k   3
其中,每个虚拟变量等于1(计数列)的城市数量,而不必对样本中的所有虚拟分别进行计算


谢谢你的帮助

使用
数据。表

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

使用
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
#一个tible:4 x 2
碳纳米管
1 k3
2 x 4
3 y 4
4 z 2
R基础:

colSums(rowsum(df[, -1], df[, 1]) > 0)

#x y z k 
#4 4 2 3 

不知道这个函数
rowsum()
!在这里提出的其他解决方案中,我认为这是一个更简单的解决方案。将
stack
包裹在它周围,就可以得到预期的输出格式
colSums(rowsum(df[, -1], df[, 1]) > 0)

#x y z k 
#4 4 2 3