【发布时间】:2016-04-02 19:47:03
【问题描述】:
这就是我的数据框的样子。最右边的两列是我想要的列。我正在计算每一行的唯一 FundTypes 的累积数量。第 4 列是所有“ActivityType”的累积唯一计数,第 5 列是仅“ActivityType=="Sale”的累积唯一计数。
dt <- read.table(text='
Name ActivityType FundType UniqueFunds(AllTypes) UniqueFunds(SaleOnly)
John Email a 1 0
John Sale a;b 2 2
John Webinar c;d 4 2
John Sale b 4 2
John Webinar e 5 2
John Conference b;d 5 2
John Sale b;e 5 3
Tom Email a 1 0
Tom Sale a;b 2 2
Tom Webinar c;d 4 2
Tom Sale b 4 2
Tom Webinar e 5 2
Tom Conference b;d 5 2
Tom Sale b;e;f 6 4
', header=T, row.names = NULL)
我尝试过dt[, UniqueFunds := cumsum(!duplicated(FundType)& !FundType=="") ,by = Name],但例如,它将 a & a;b & c;d 计为 3 个唯一值,而不是所需的 4 个唯一值,因为这些因素用分号分隔。请告诉我一个解决方案.
更新:我的真实数据集看起来更像这样:
dt <- read.table(text='
Name ActivityType FundType UniqueFunds(AllTypes) UniqueFunds(SaleOnly)
John Email "" 0 0
John Conference "" 0 0
John Email a 1 0
John Sale a;b 2 2
John Webinar c;d 4 2
John Sale b 4 2
John Webinar e 5 2
John Conference b;d 5 2
John Sale b;e 5 3
John Email "" 5 3
John Webinar "" 5 3
Tom Email a 1 0
Tom Sale a;b 2 2
Tom Webinar c;d 4 2
Tom Sale b 4 2
Tom Webinar e 5 2
Tom Conference b;d 5 2
Tom Sale b;e;f 6 4
', header=T, row.names = NULL)
唯一的累积向量需要考虑缺失值。
【问题讨论】:
-
FundCode不是您的数据框的一部分,您能澄清一下吗? -
这是一个错误。谢谢你抓住它。我修好了。
-
也许我遗漏了一些东西,但对于
Name == "John" & ActivityType == "Sale",只有 3 个独特的FundTypes -a;b(第 2 行),b(第 4 行) )和b;e(第7行),不是吗?除非您在这里指的是其他内容:“但它会将 a;b 和 b;c 和 c;d 视为 3 个唯一值”? -
@nrussell 你是对的,我的示例超出了我提供的数据框的上下文。这更像是一个普遍的例子。如果您认为我在帖子中的内容令人困惑,我可以解决它。
-
这可能有助于澄清这一点 - 或者可能只是通过将第 4 行从
b更改为b;cforFundType来编辑示例数据,并包括用于生成第四行的代码和第五列。
标签: r data.table dplyr zoo