基于条件组合表

时间:2017-11-02 02:24:19

标签: r

我能否知道是否有任何代码可以创建一个为我绑定多个表的表或数据框?

table(df$col1)
table(df$col1,df$col2<0)
table(df$col1,df$col3>0)
table(df$col1,df$col4>0)

在上面的示例中,我基于df$col1中的类似值对数据集进行分组,并显示满足条件df$col2<0的数据。我得到的是满足条件的记录数量的真实和错误矩阵,而不是。我想要一个仍然按df$col1对数据进行分组的组合表,并在同一个表中显示df$col2<0,df$col3>0df$col4>0的真实条件。

1 个答案:

答案 0 :(得分:0)

根据说明,我们可以进行cbind

r1 <- cbind(table(df$col1), table(df$col1,df$col2<0)[,2],
     table(df$col1,df$col3>0)[,2], table(df$col1,df$col4>0)[,2]) 

如果有很多列,可以通过循环来完成

r2 <- do.call(cbind, c(list(col1 = table(df$col1)), Map(function(x, y)  
     table(df$col1, get(y)(x, 0))[,2], df[-1], c("<", ">", ">"))))

all.equal(r1, r2, check.attributes = FALSE)
#[1] TRUE

我们也可以通过操作分组来做到这一点。

library(dplyr)
df %>% 
    mutate(col2 = col2 < 0) %>%
    mutate_at(3:4, funs(. > 0)) %>% 
    group_by(col1) %>% 
    mutate(n = n()) %>%
    group_by(n, add = TRUE) %>% 
    summarise_all(sum)

数据

set.seed(24)
df <- as.data.frame(matrix(sample(-2:5, 10*4, replace = TRUE), ncol=4))
names(df) <- paste0("col", 1:4)