结合其他两列的信息创建新列,无论顺序如何

问题描述 投票:0回答:1

我想在数据框中创建一个新列,该列结合来自另外两列的信息生成一个唯一值,无论顺序如何

示例

df = tibble(x = c(1,2,3,3,4,10,9), y=c(2,1,9,9,9,1,3))
df

# A tibble: 7 × 2
      x     y
  <dbl> <dbl>
1     1     2
2     2     1
3     3     9
4     3     9
5     4     9
6    10     1
7     9     3

我想生成这个

# A tibble: 7 × 3
      x     y  type
  <dbl> <dbl> <dbl>
1     1     2     1
2     2     1     1
3     3     9     2
4     3     9     2
5     4     9     3
6    10     1     4
7     9     3     2

对于通用数据框如何实现这一点?

编辑: 这与链接的问题不是同一个问题。

建议的答案导致

> df |>  
+     group_by(x,y) |> 
+     mutate(type = cur_group_id())

# A tibble: 7 × 3
# Groups:   x, y [6]
      x     y  type
  <dbl> <dbl> <int>
1     1     2     1
2     2     1     2
3     3     9     3
4     3     9     3
5     4     9     4
6    10     1     6
7     9     3     5

这是错误的。

r dataframe dplyr
1个回答
0
投票
df |>
  mutate(grp = paste(pmin(x,y), pmax(x,y))) |>
  mutate(type = cur_group_id(), .by = grp)

结果

      x     y grp    type
  <dbl> <dbl> <chr> <int>
1     1     2 1 2       1
2     2     1 1 2       1
3     3     9 3 9       2
4     3     9 3 9       2
5     4     9 4 9       3
6    10     1 1 10      4
7     9     3 3 9       2
© www.soinside.com 2019 - 2024. All rights reserved.