当前位置: 首页 > 知识库问答 >
问题:

将唯一编号分配给组内的唯一值?

潘雅珺
2023-03-14

我想在按“prop”分组后,根据“井”的值生成列well_rep。

类似于cur_group_id,但是数字在不同的组中从1开始?

共有3个答案

谷梁凌
2023-03-14

如果我们想使用cur_group_id,做一个嵌套分组,然后提取列

library(dplyr)
df %>%
    group_by(prop) %>%
    mutate(well_rep2 = cur_data() %>%
                  group_by(well)%>%
                  transmute(out = cur_group_id()) %>%
                  pull(out))

-输出

# A tibble: 40 x 4
# Groups:   prop [2]
   well   prop well_rep well_rep2
   <chr> <int>    <int>     <int>
 1 C03       0        1         1
 2 C03       0        1         1
 3 C03       0        1         1
 4 C03       0        1         1
 5 C03       0        1         1
 6 C05       0        2         2
 7 C05       0        2         2
 8 C05       0        2         2
 9 C05       0        2         2
10 C05       0        2         2
# … with 30 more rows
df <- structure(list(well = c("C03", "C03", "C03", "C03", "C03", "C05", 
"C05", "C05", "C05", "C05", "C05", "C05", "D02", "D02", "D02", 
"D02", "D02", "D02", "D02", "D02", "D02", "E07", "E07", "E07", 
"E07", "E07", "E07", "E07", "E07", "E07", "E07", "E07", "F02", 
"F02", "F02", "F02", "F02", "F02", "F02", "F02"), prop = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 50L, 50L, 50L, 50L, 
50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L), well_rep = c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L)), class = "data.frame", row.names = c(NA, 
-40L))
师建德
2023-03-14

你可以做:

df %>%
  group_by(prop) %>%
  mutate(well_rep = as.numeric(as.factor(well)))
# A tibble: 40 x 3
# Groups:   prop [2]
   well   prop well_rep
   <chr> <int>    <dbl>
 1 C03       0        1
 2 C03       0        1
 3 C03       0        1
 4 C03       0        1
 5 C03       0        1
 6 C05       0        2
 7 C05       0        2
 8 C05       0        2
 9 C05       0        2
10 C05       0        2
林子石
2023-03-14

以下是使用匹配重复的几种方法-

library(dplyr)

df %>%
  group_by(prop) %>%
  mutate(well_rep1 = match(well, unique(well)), 
         well_rep2 = cumsum(!duplicated(well)))

#   well prop well_rep well_rep1 well_rep2
#1   C03    0        1         1         1
#2   C03    0        1         1         1
#3   C03    0        1         1         1
#4   C03    0        1         1         1
#5   C03    0        1         1         1
#6   C05    0        2         2         2
#7   C05    0        2         2         2
#8   C05    0        2         2         2
#9   C05    0        2         2         2
#10  C05    0        2         2         2
#11  C05    0        2         2         2
#12  C05    0        2         2         2
#13  D02   50        1         1         1
#14  D02   50        1         1         1
#15  D02   50        1         1         1
#16  D02   50        1         1         1
#17  D02   50        1         1         1
#18  D02   50        1         1         1
#19  D02   50        1         1         1
#20  D02   50        1         1         1
#21  D02   50        1         1         1
#22  E07   50        2         2         2
#23  E07   50        2         2         2
#24  E07   50        2         2         2
#25  E07   50        2         2         2
#26  E07   50        2         2         2
#27  E07   50        2         2         2
#28  E07   50        2         2         2
#29  E07   50        2         2         2
#30  E07   50        2         2         2
#31  E07   50        2         2         2
#32  E07   50        2         2         2
#33  F02   50        3         3         3
#34  F02   50        3         3         3
#35  F02   50        3         3         3
#36  F02   50        3         3         3
#37  F02   50        3         3         3
#38  F02   50        3         3         3
#39  F02   50        3         3         3
#40  F02   50        3         3         3
 类似资料:
  • 这是我拥有的数据帧的简化版本: 在这个 df 中,row.names 是唯一的 ID(我知道它打破了整洁数据的规则)。 在示例中,我们可以看到行id1和行id2是重复的。 我想做的是确定它们是重复的,并为这些重复项分配一个唯一的组名称。但请注意,将有多行彼此重复。 我希望的产出是: 有什么想法吗? 编辑: 我的原始数据示例:

  • 我的数组包含从0到整数的随机唯一数。最大值。 如何生成唯一的id/签名(int)来唯一地标识每个数组,而不是搜索每个数组并检查每个数字。 例如 每个数组可以有不同的长度,但数字在数组中不重复,可以在其他数组中重复。每个数组的唯一id的目的是通过id来识别它,以便快速进行搜索。数组包含组件的id,数组的唯一签名/id将标识其中包含的组件。 此外,无论数组中的值的顺序如何,生成的id应该是相同的。像{

  • null 无效示例: 关于只有当值是唯一的时,我如何匹配有什么建议吗?

  • 我正在处理一个大的时间序列,其中一列包含四个不同的传感器,一列包含测量值。我需要为属于同一时间的测量分配一个 id。问题是,每个设备的测量时间略有不同,因此我不能简单地按时间戳对它们进行分组。在按时间排序的数据框中,应分组的测量值可以通过唯一设备 ID 序列进行识别。这里的问题是,一次 4 台设备记录一个值,另一次 3 台设备记录一个值。我的数据如下所示。 您可以通过以下方式复制: 我需要为连续的

  • 问题内容: 为了报告目的,我需要透视每个记录上唯一的查询结果。我当前的声明是: 查询输出的示例是: 最终,信息需要看起来像这样: 我在想我需要为“ pivot_id”添加一列,以便每个分组都有一个共同的记录,因此在数据透视之前的查询结果将如下所示: 哪种SQL语句将为每次购买生成一个自动记录号,而且还会从每个customer_name重新开始? 使用SQL代码生成器在Access 2007中工作。

  • 问题内容: 在处理从YQL返回的JSON时,我发现自己正在寻找一种从数组中提取所有唯一值的方法。 代码看起来有点“忙”,我想知道是否有更优雅的方法从数组中提取唯一值。 问题答案: 您可以使用indexOf来检查元素是否在数组中。 或者如果您具有唯一的ID或名称,则使用对象而不是数组:var output = {}