2016-09-19 2 views
3

У меня есть следующий набор данныхграф строки, которые не содержат строку

#df 
Factors Transactions 
    a,c    1 
    b    0 
    c    0 
d,a    0 
    a    1 
    a    0 
    b    1 

Я хотел бы знать, сколько раз мы сделали не есть фактор, и мы имели сделку. Итак, мой желателен выход следующим образом:

#desired output 
Factors  count 
    a   1 
    b   2 
    c   2 
    d   3 

Например, только один раз, когда мы не имели a и мы имели сделку (т.е. только в последней строке).

Существует много способов узнать, сколько раз у нас был каждый фактор, и у нас были транзакции. Например, я попытался это один:

library(data.table) 

setDT(df)[, .(Factors = unlist(strsplit(as.character(Factors), ","))), 
    by = Transactions][,.(Transactions = sum(Transactions > 0)), by = Factors] 

Но я хочу, чтобы подсчитать, сколько раз мы не есть фактор, и мы имели сделку.

Заранее спасибо.

ответ

2

Вы можете вычислить обратное, то есть, сколько раз коэффициент имеет транзакцию, а затем разница между общим количеством сделок и сделок, для каждого отдельного фактора будет то, что вы ищете:

library(data.table) 
total <- sum(df$Transactions > 0) 

(setDT(df)[, .(Factors = unlist(strsplit(as.character(Factors), ","))), Transactions] 
      [, total - sum(Transactions > 0), Factors]) 

# Factors V1 
#1:  a 1 
#2:  c 2 
#3:  b 2 
#4:  d 3 
1

Мы может также сделать это с cSplit

library(splitstackshape) 
cSplit(df, "Factors", ',', 'long')[, sum(df$Transactions) - sum(Transactions>0), Factors] 
# Factors V1 
#1:  a 1 
#2:  c 2 
#3:  b 2 
#4:  d 3 

Или с dplyr/tidyr

library(dplyr) 
library(tidyr) 
separate_rows(df, Factors) %>% 
      group_by(Factors) %>% 
      summarise(count = sum(df$Transactions) - sum(Transactions>0)) 
Смежные вопросы