查找计数,直到一个数字第一次出现在另一个变量的所有相同值的变量中

大卫

我的数据看起来像这样。我现在想要做的是创建一个新列“接受计数”,我想在“1”出现之前找到“接受”列中出现 0 的次数,对于每个相同的“客户 ID”值

  Customer ID | Acceptance | Discount
       211         0          1
       211         0          0
       211         1          1
       202         1          1
       202         0          0
       194         0          0
       202         0          1
       194         1          0
       194         0          1
       198         0          1

另外我想有另一个新列“折扣计数”,如果第一次出现在每个“客户 ID”的“接受”中,它应该是 1,折扣值也是 1。否则,“折扣计数” " 应为 0。如果“客户 ID”的所有值的“接受”为 0,则“接受计数”和“折扣计数”均应为 N/A

** 例如,客户 ID 211 在第三次接受时,“Acceptance Count”应为 2,当 Discount 为 1 时,“Acceptance”第一次应为 1,因此“Discount Count”应为 1,客户 ID 为 194在第二个实例中接受,因此“接受计数”为 1,当折扣为 0 时接受,因此“折扣计数”为 0。

预期结果:

  Customer ID |  Acceptance Count | Discount Count
       211              2                  1
       202              0                  1
       194              1                  0
       198             N/A                N/A

我希望我能够清楚我在寻找什么,非常感谢您的帮助。

此外,我有 250,000 个不同的客户 ID,总共有 750,000 个数据条目。

埃文·弗里德兰

这是一个尝试,但我相信 198 和 202 的接受度都为零,这意味着接受度数和折扣数都应为 NA。

# Your data
df <- structure(list(Customer_ID = c(211, 211, 211, 202, 202, 194, 202, 194, 194, 198), 
                     Acceptance = c(0, 0, 1, 0, 0, 0, 0, 1, 0, 0), 
                     Discount = c(1, 0, 1, 1, 0, 0, 1, 0, 1, 1)), 
                .Names = c("Customer_ID", "Acceptance", "Discount"),
                row.names = c(NA, -10L), class = "data.frame")

# Desired output
df.split <- split(df, df$Customer_ID)
out <- t(sapply(df.split, function(x){ 
  a.1 <- which(x$Acceptance == 1) 
  d.1 <- which(x$Discount == 1)
  A_C <- ifelse(length(a.1) > 0, max(a.1) - length(a.1), 0)
  D_C <- ifelse(any(a.1[1] == d.1), 1, ifelse(sum(x$Acceptance) == 0, NA, 0))
  A_C <- ifelse(is.na(D_C), NA, A_C)
  setNames(c(A_C, D_C), c("Acceptance_Count","Discount_Count"))
}))

out <- cbind.data.frame(Customer_ID = as.numeric(rownames(out)), out)
out <- out[order(match(rownames(out), df$Customer_ID)),]
rownames(out) <- NULL
out
#  Customer_ID Acceptance_Count Discount_Count
#1         211                2              1
#2         202                0             1
#3         194                1              0
#4         198               NA             NA

编辑:条件澄清。

-如果 Acceptance 为 1,则 Acceptance_Count = 和 1 之前的零

Acceptance Discount
         0        0
         0        0
         1        0
Acceptance_Count Discount_Count
         2        0

-如果 Discount 的 1 与 Acceptance 的第一个 1 位于同一行 -> Dicount_Count = 1

Acceptance Discount
         0        0
         0        0
         1        1
Acceptance_Count Discount_Count
         2        1

-如果验收全为零 -> 验收计数 & 折扣计数 = NA

Acceptance Discount
         0        0
         0        0
         0        0
Acceptance_Count Discount_Count
         NA        NA

-其他可能性

Acceptance Discount
         1        0
         0        1
         1        0
Acceptance_Count Discount_Count
         1        0

Acceptance Discount
         0        0
         0        1
         0        1
Acceptance_Count Discount_Count
         NA        NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

第一次出现的变量有值吗?

来自分类Dev

如果一个值出现在另一个列表中,则将其删除

来自分类Dev

查找出现在两个数组中的两个元素,然后将它们放入另一个数组

来自分类Dev

从另一个向量中删除向量中第一次出现的元素

来自分类Dev

使用dplyr group_by总结如何使一个变量出现在另一个变量的最大值处?

来自分类Dev

从另一个数据帧中的一个数据帧中查找所有出现的值的最佳方法是什么?

来自分类Dev

如果列表中包含Python中另一个列表的子字符串,则查找列表中的第一次出现

来自分类Dev

如何有条件地计数和记录样本是否出现在另一个数据集的行中?

来自分类Dev

计算一个数组中的数字出现在另一个数组中的次数

来自分类Dev

如何查找特殊字符是否出现在bash中的另一个第一个特殊字符之前

来自分类Dev

计算直到第一个值出现在熊猫数据框中的天数

来自分类Dev

我如何将所有连接到一个sql表中,并且第一次出现在另一个表中,而所有都保留在第一个表中

来自分类Dev

一个数据帧中的一行出现在另一个数据帧中的概率

来自分类Dev

在文件中第一次与第二次出现模式之间用另一个模式替换

来自分类Dev

正则表达式匹配,直到第一个数字出现在python中的字符串中

来自分类Dev

如果一个值出现在另一个列表中,则将其删除

来自分类Dev

查找大于x的第一个数字并在该行中返回另一个值

来自分类Dev

查找出现在另一个文本文件中的文本文件中的所有单词

来自分类Dev

Excel-查找数字是否出现在另一个工作表中

来自分类Dev

如何基于另一个值的第一次迭代获取Excel值?

来自分类Dev

返回出现在字符串中第一个数字之前的所有字母

来自分类Dev

查找一个数据帧中的一行出现在R中的另一个数据帧中的时间

来自分类Dev

选择出现在另一个查询的所有结果中的条目

来自分类Dev

比较一个列表中的所有项目以相同的顺序出现在另一个列表中

来自分类Dev

确定一个字符是否出现在另一个字符第一次出现之前

来自分类Dev

如何找到字符串值出现在另一个表的列中的所有行?

来自分类Dev

从第一个数组中删除除第一次出现的第二个数组项之外的所有项

来自分类Dev

片段在第一次选择时“覆盖”另一个片段

来自分类Dev

如何在 MySQL 的特定列中第一次出现另一个值的行中获取列的值?

Related 相关文章

  1. 1

    第一次出现的变量有值吗?

  2. 2

    如果一个值出现在另一个列表中,则将其删除

  3. 3

    查找出现在两个数组中的两个元素,然后将它们放入另一个数组

  4. 4

    从另一个向量中删除向量中第一次出现的元素

  5. 5

    使用dplyr group_by总结如何使一个变量出现在另一个变量的最大值处?

  6. 6

    从另一个数据帧中的一个数据帧中查找所有出现的值的最佳方法是什么?

  7. 7

    如果列表中包含Python中另一个列表的子字符串,则查找列表中的第一次出现

  8. 8

    如何有条件地计数和记录样本是否出现在另一个数据集的行中?

  9. 9

    计算一个数组中的数字出现在另一个数组中的次数

  10. 10

    如何查找特殊字符是否出现在bash中的另一个第一个特殊字符之前

  11. 11

    计算直到第一个值出现在熊猫数据框中的天数

  12. 12

    我如何将所有连接到一个sql表中,并且第一次出现在另一个表中,而所有都保留在第一个表中

  13. 13

    一个数据帧中的一行出现在另一个数据帧中的概率

  14. 14

    在文件中第一次与第二次出现模式之间用另一个模式替换

  15. 15

    正则表达式匹配,直到第一个数字出现在python中的字符串中

  16. 16

    如果一个值出现在另一个列表中,则将其删除

  17. 17

    查找大于x的第一个数字并在该行中返回另一个值

  18. 18

    查找出现在另一个文本文件中的文本文件中的所有单词

  19. 19

    Excel-查找数字是否出现在另一个工作表中

  20. 20

    如何基于另一个值的第一次迭代获取Excel值?

  21. 21

    返回出现在字符串中第一个数字之前的所有字母

  22. 22

    查找一个数据帧中的一行出现在R中的另一个数据帧中的时间

  23. 23

    选择出现在另一个查询的所有结果中的条目

  24. 24

    比较一个列表中的所有项目以相同的顺序出现在另一个列表中

  25. 25

    确定一个字符是否出现在另一个字符第一次出现之前

  26. 26

    如何找到字符串值出现在另一个表的列中的所有行?

  27. 27

    从第一个数组中删除除第一次出现的第二个数组项之外的所有项

  28. 28

    片段在第一次选择时“覆盖”另一个片段

  29. 29

    如何在 MySQL 的特定列中第一次出现另一个值的行中获取列的值?

热门标签

归档