Tetapkan ID unik berdasarkan nilai di salah satu dari dua kolom
Ini bukan duplikat dari pertanyaan ini . Harap baca pertanyaan seluruhnya sebelum memberi label pada duplikat.
Saya memiliki data.frame seperti ini:
library(tidyverse)
tibble(
color = c("blue", "blue", "red", "green", "purple"),
shape = c("triangle", "square", "circle", "hexagon", "hexagon")
)
color shape
<chr> <chr>
1 blue triangle
2 blue square
3 red circle
4 green hexagon
5 purple hexagon
Saya ingin menambahkan group_id
kolom seperti ini:
color shape group_id
<chr> <chr> <dbl>
1 blue triangle 1
2 blue square 1
3 red circle 2
4 green hexagon 3
5 purple hexagon 3
Kesulitannya adalah saya ingin mengelompokkan berdasarkan nilai unik dari color
atau shape
. Saya menduga solusinya mungkin menggunakan kolom daftar, tetapi saya tidak tahu caranya.
Jawaban
2 akrun
Kita bisa gunakan duplicated
dalambase R
df1$group_id <- cumsum(!Reduce(`|`, lapply(df1, duplicated)))
-keluaran
df1
# A tibble: 5 x 3
# color shape group_id
# <chr> <chr> <int>
#1 blue triangle 1
#2 blue square 1
#3 red circle 2
#4 green hexagon 3
#5 purple hexagon 3
Atau menggunakan tidyverse
library(dplyr)
library(purrr)
df1 %>%
mutate(group_id = map(., duplicated) %>%
reduce(`|`) %>%
`!` %>%
cumsum)
data
df1 <- structure(list(color = c("blue", "blue", "red", "green", "purple"
), shape = c("triangle", "square", "circle", "hexagon", "hexagon"
)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
))
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'