计算不包含字符串

时间:2016-09-19 01:55:30

标签: r

我有以下数据集

 #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 个答案:

答案 0 :(得分: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 :(得分: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))