汇总数据并列出字符串中变量的频率

时间:2018-02-20 17:38:36

标签: r data.table

我有以下数据表

var open = $('.open'),
a = $('ul').find('button');

console.log(a.hasClass('active'));

open.click(function(e){
e.preventDefault();
var $this = $(this),
    speed = 500;
if($this.hasClass('active') === true) {
    $this.removeClass('active').next('.box').slideUp(speed);
} else if(a.hasClass('active') === false) {
    $this.addClass('active').next('.box').slideDown(speed);
} else {
    a.removeClass('active').next('.box').slideUp(speed);
    $this.addClass('active').next('.box').slideDown(speed);
  }
});

我想要的是以下形式的汇总表:

dt<-data.table(string=c("A","A","A","B","B","C"), source=c("a","b","c","a","b","a"), N=rep(1,6))
    string source  N
1:      A      a   1
2:      A      b   1
3:      A      c   1
4:      B      a   1
5:      B      b   1
6:      C      a   1

这意味着,我想删除带有N源的列,但是请将此信息保存在一个新列中,该列包含来自源a | b | c的信息。问题是如果我们在原始dt中没有这些信息,我不知道如何添加缺失的0。

如果我尝试代码 string a_b_c 1: A 1|1|1 2: B 1|1|0 3: C 1|0|0 ,我得到这样的话:

dt <- dt[, paste(N, collapse="|"), by = string]

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

那样的东西?不像评论中的一个班轮那样整洁。 (使用已经使用的dplyr和data.table)

dt2 <- dt %>% 
   data.table::dcast(string ~ source) %>% 
   mutate(a_b_c = paste(a, b, c, sep="|")) %>%
   select(string, a_b_c)

给予

string a_b_c
1      A 1|1|1
2      B 1|1|0
3      C 1|0|0

答案 1 :(得分:1)

library(data.table)
dcast(dt,string~source,fill=0,value.var = "N")[,paste0(.SD,collapse = "|"),by=string]
   string    V1
1:      A 1|1|1
2:      B 1|1|0
3:      C 1|0|0