我有以下数据集
#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]
但是,我希望计算我们没有有多少次因素而我们有交易。
提前致谢。
答案 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))