首页 > 解决方案 > 将唯一的主键应用于数据框中的每个自定义组

问题描述

我有以下数据框:

DAYS7 <- c('Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday', 'Sunday')   
DAYS <- rep(DAYS7, 3, each = 3)
BIN <- c('00_07', '07_18', '18_24')
BIN <- rep(BIN, 21)
A <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1)
B <- c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1)
DESIRED_OUTPUT <- c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4)
dataframe <- as.data.frame(cbind(DAYS, BIN, A, B, DESIRED_OUTPUT))  
dataframe$DAYS <- as.character(dataframe$DAYS)
dataframe$A <- as.numeric(as.character(dataframe$A))
dataframe$B <- as.numeric(as.character(dataframe$B))
dataframe$DESIRED_OUTPUT <- as.numeric(as.character(dataframe$DESIRED_OUTPUT))

BIN 列有 3 个输出:00_07、07_18、18_24。(基本的想法是我正在分析财务数据。使用这个 bin,我可以看到交易的哪一部分发生在一天内的某个时间间隔内 - 无论是早上时间(0:00 到 7 点之间: 00)、白天(7:00 到 18:00 之间)或晚上(18:00 到 24:00 之间)。

如果是工作日,则A 列中的相应单元格为零。如果是节假日,A 列显示 1。

B列与 A 列基本相同,除了它在每个周末添加前导和尾随 1,因此所有周五晚上 (18:00-24:00) 和周一早上 (00:00-07:00) 也将被标记作为1。

现在,棘手的部分来了。我想将唯一的主键应用于列 B中定义的每个自定义组。所以我想到的是这样的(参见DESIRED_OUTPUT列)。

在此处输入图像描述

你对如何在 R 中解决这个问题有什么建议吗?

标签: rdataframe

解决方案


使用基数 R。需要对数据进行排序。

dataframe$PK <- cumsum(diff(c(0, dataframe$B)) == 1) * dataframe$B

推荐阅读