【问题标题】:Can we group column values based on condition in R and generate record ID我们可以根据 R 中的条件对列值进行分组并生成记录 ID
【发布时间】:2022-06-29 18:16:09
【问题描述】:

我有下面的数据集,我想使用“Current_Record_ID”和“Stores”创建一个“New_Record_ID”列。需要使“New_Record_ID”每 2 个 Store 增加一次。

虚拟数据框:

df <- data.frame(Stores=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12),Row_ID=c(1, 1, 2, 2, 2, 2, 3, 3, 3, 3,4,4))

Stores Current_Record_ID
1 1
2 1
3 2
4 2
5 2
6 2
7 3
8 3
9 3
10 3
11 4
12 4

预期结果

Stores Current_Record_ID New_Record_ID
1 1 1
2 1 1
3 2 2
4 2 2
5 2 3
6 2 3
7 3 4
8 3 4
9 3 5
10 3 5
11 4 6
12 4 6

【问题讨论】:

  • “Row_ID 少于或等于 2 个商店”是什么意思?您的意思是 2 * Stores 中的值吗?

标签: r


【解决方案1】:

我不完全确定您在描述什么逻辑,但这里是如何根据 R 中的逻辑在数据框中创建新列:

使用:

df$New_ID <- with(df, if (Row_ID < 2) {Stores} else {Row_ID})

在内部使用:

df <- within(df, New_ID <- if (Row_ID < 2) {Stores} else {Row_ID})

使用dplyr::mutate:

df <- df %>% dplyr::mutate(New_ID = if (Row_ID < 2) {Stores} else {Row_ID})

就像我说的,我不清楚你的逻辑,所以你必须替换它并使用对你的项目最有意义的方法。

有关详细信息,请参阅 this postthese docs

【讨论】:

  • 感谢您的回复卢克! :) 我将解释我试图在这里构建的逻辑:所以我在数据框中有两列(根据提供的代码)。现在在数据框中,商店是唯一的,并且 Row_ID 是重复的,因此每个重复的行 ID 都有唯一的商店。但是,如果对于任何重复的 Row_ID 存储超过 2 个,则 Row_ID 将更改。因此,新 ID 将类似于 Row ID,但它不应包含超过 2 个商店。对不起我的描述。
  • 没问题,小腿。使用此描述编辑您的原始问题可能是一个好主意,以便其他人能够轻松地看到它(他们可能比我有更好的建议)。如果我对您的理解正确,您需要使 id 每 2 个 ID 递增一次,对吗?
  • 是的,卢克,没错!我也编辑了我原来的问题。希望它能提出正确的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多