두 열 중 하나의 값을 기반으로 고유 ID 할당
Dec 16 2020
이것은 이 질문과 중복되지 않습니다 . 중복 라벨을 지정하기 전에 질문을 완전히 읽으십시오.
다음과 같은 data.frame이 있습니다.
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
다음과 같은 group_id
열 을 추가하고 싶습니다.
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
어려움은 color
또는의 고유 한 값으로 그룹화하려는 것 shape
입니다. 해결책이 목록 열을 사용하는 것이라고 생각하지만 방법을 알 수 없습니다.
답변
2 akrun Dec 15 2020 at 23:35
우리가 사용할 수 duplicated
있는base R
df1$group_id <- cumsum(!Reduce(`|`, lapply(df1, duplicated)))
-산출
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
또는 사용 tidyverse
library(dplyr)
library(purrr)
df1 %>%
mutate(group_id = map(., duplicated) %>%
reduce(`|`) %>%
`!` %>%
cumsum)
데이터
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"
))