r - 使用 dplyr 枚举 data.frame 中的冗余值

标签 r dataframe dplyr tidyr

我有一个包含两组 ID 的 data.frame,它们都可能是多余的。

这是一个例子:

df <- data.frame(id1 = c("id.1","id.1","id.1","id.1","id.1","id.2","id.2","id.3"),
                 id2 = c("id.1.a","id.1.b","id.1.a","id.1.c","id.1.b","id.2.a","id.2.b","id.3.a"))

我想要做的是添加另一个 ID 列,其中 df$id1 将有一个数字后缀,值增加,遵循 df$id2 的顺序.

因此对于上面的示例,生成的 data.frame 将是:

res.df <- data.frame(id1 = c("id.1","id.1","id.1","id.1","id.1","id.2","id.2","id.3"),
                     id2 = c("id.1.a","id.1.b","id.1.a","id.1.c","id.1.b","id.2.a","id.2.b","id.3.a"),
                     id3 = c("id.1.01","id.1.03","id.1.02","id.1.05","id.1.04","id.2.01","id.2.02","id.3"))

因为 id.1 映射到 id.1.a 两次,映射到 id.1.b 两次,然后映射到 id.1.c一次,变成:id.1.01, id.1.03, id.1.02, id.1.05, id.1.04

知道如何使用 dplyrtidyr 实现这一点吗?

最佳答案

  1. 我们按 id1 对行进行分组,因为这是我们要计算行数的分组。
  2. 我们将它们排列为 id1 后跟 id2
  3. 我们创建一个新列,将 row_number 附加到 id1 的末尾。由于行按 id1id2 排列,row_number 将保持该顺序

例子:

df %>%
    group_by(id1) %>%
    arrange(id1, id2) %>%
    mutate(id3 = paste0(id1, '.', row_number()))


# A tibble: 8 x 3
# Groups:   id1 [3]
  id1   id2    id3   
  <fct> <fct>  <chr> 
1 id.1  id.1.a id.1.1
2 id.1  id.1.a id.1.2
3 id.1  id.1.b id.1.3
4 id.1  id.1.b id.1.4
5 id.1  id.1.c id.1.5
6 id.2  id.2.a id.2.1
7 id.2  id.2.b id.2.2
8 id.3  id.3.a id.3.1

关于r - 使用 dplyr 枚举 data.frame 中的冗余值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51756293/

相关文章:

r - 强制nls拟合通过指定点的曲线

r - 我无法将 postgresql schema.table 与 dplyr 包连接

r - 如何在自动绘图中放置不同的符号

python - Pandas Dataframe/Numpy 数组 "axis"定义中的歧义

python - 使用条件将一个数据帧映射到另一个数据帧

python - 如何检查数据框中的文本列是否包含可能的模式列表,从而允许错误输入?

r - 使用列表作为 dplyr::case_when 的结果时丢失名称

r - 使用 dplyr 在多列上按组插入 NA

r - 条件格式 FlexTable

r - 将多个现有 xts 对象转换为多个 data.frames