[英]conditional row indexing in r
我有一個大型數據集,我想創建一個新列來根據條件設置值。 這是一個例子:
x <- tibble(
x1 = c(rep("a", 3), rep("a1", 3), rep("a2", 3))
)
我想要一個新列來標識第一列的所有相同值。 最終結果應如下所示:
x <- tibble(
x1 = c(rep("a", 3), rep("a1", 3), rep("a2", 3)),
x2 = c(rep(1, 3), rep(2, 3), rep(3, 3))
)
是否有捷徑可尋? 也許在 dplyr 中? 謝謝您的幫助。
使用.GRP
的data.table
選項
> setDT(x)[, x2 := .GRP, x1][]
x1 x2
1: a 1
2: a 1
3: a 1
4: a1 2
5: a1 2
6: a1 2
7: a2 3
8: a2 3
9: a2 3
或rleid
(感謝@akrun 的評論)
> setDT(x)[, x2 := rleid(x1)][]
x1 x2
1: a 1
2: a 1
3: a 1
4: a1 2
5: a1 2
6: a1 2
7: a2 3
8: a2 3
9: a2 3
我們可以使用match
library(dplyr)
x <- x %>%
mutate(x2 = match(x1, unique(x1)))
或者進行分組並使用cur_group_id
獲取組索引
x <- x %>%
group_by(x1) %>%
mutate(x2 = cur_group_id()) %>%
ungroup
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.