我在資料框中有一列 ID,有時會重復,例如,
| ID |
|---|
| 209 |
| 315 |
| 109 |
| 315 |
| 451 |
| 209 |
我想要做的是獲取這一列并創建另一列來指示該行所屬的 ID。即我希望它看起來像,
| ID | 身份證類別 |
|---|---|
| 209 | 1 |
| 315 | 2 |
| 109 | 3 |
| 315 | 2 |
| 451 | 4 |
| 209 | 1 |
本質上,我想遍歷 ID,如果它等于前一個 ID,我表示它來自同一個 ID,如果它是一個新 ID,我為它創建一個新指標。
有誰知道 R 中有一個我可以使用的快速函式嗎?或者有什么其他的建議?
uj5u.com熱心網友回復:
轉換為按級別排序的因子unique(資料集中出現的順序),然??后轉換為數值:
data$IDCategory <- as.numeric(factor(data$ID, levels = unique(data$ID)))
#> data
# ID IDCategory
#1 209 1
#2 315 2
#3 109 3
#4 315 2
#5 451 4
#6 209 1
uj5u.com熱心網友回復:
library(tidyverse)
data <- tibble(ID= c(209,315,109,315,451,209))
data %>%
left_join(
data %>%
distinct(ID) %>%
mutate(`ID Category` = row_number())
)
#> Joining, by = "ID"
#> # A tibble: 6 × 2
#> ID `ID Category`
#> <dbl> <int>
#> 1 209 1
#> 2 315 2
#> 3 109 3
#> 4 315 2
#> 5 451 4
#> 6 209 1
由reprex 包于 2022-03-10 創建 (v2.0.0 )
uj5u.com熱心網友回復:
df <- df %>%
dplyr::mutate(`ID Category` = as.numeric(interaction(ID, drop=TRUE)))
用 data.table 回答
library(data.table)
df <- as.data.table(df)
df <- df[
j = `ID Category` := as.numeric(interaction(ID, drop=TRUE))
]
此解決方案的優點是您可以為一組變數創建唯一 ID。在這里你只需要ID,但如果你想擁有一個唯一的 ID,讓這對夫婦說 [ ID- Location] 你可以。
data <- tibble(ID= c(209,209,209,315,315,315), Location = c("A","B","C","A","A","B"))
data <- data %>%
dplyr::mutate(`ID Category` = as.numeric(interaction(ID, Location, drop=TRUE)))
uj5u.com熱心網友回復:
另一種方式:
merge(data,
data.frame(ID = unique(data$ID),
ID.Category = seq_along(unique(data$ID))
), sort = F)
# ID ID.Category
# 1 209 1
# 2 209 1
# 3 315 2
# 4 315 2
# 5 109 3
# 6 451 4
資料:
tibble(ID = c(209,315,109,315,451,209)) -> data
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441054.html
上一篇:按列輕松排序串列2D
