假設我有以下資料集,并且我想向每個組添加從 1 開始的長度為 n 的重復數字。在此示例中,n 設定為 3。
test <- data.frame("group" = c(rep("AA",5),rep("BB",3)), "value" = 12:19)
group value
1 AA 12
2 AA 13
3 AA 14
4 AA 15
5 AA 16
6 BB 17
7 BB 18
8 BB 19
鑒于我指定重復數 (n) 為 3,我想將資料框轉換為以下內容。
group value group_n
1 AA 12 AA_1
2 AA 13 AA_1
3 AA 14 AA_1
4 AA 15 AA_2
5 AA 16 AA_2
6 BB 17 BB_1
7 BB 18 BB_1
8 BB 19 BB_1
任何幫助表示贊賞。謝謝!
uj5u.com熱心網友回復:
在按“組”分組后,我們可以使用length.outinrep
library(data.table)
n <- 3
setDT(test)[, group_n := paste0(.BY, "_", rep(seq_len(.N),
each = n, length.out = .N)), by = group]
-輸出
> test
group value group_n
<char> <int> <char>
1: AA 12 AA_1
2: AA 13 AA_1
3: AA 14 AA_1
4: AA 15 AA_2
5: AA 16 AA_2
6: BB 17 BB_1
7: BB 18 BB_1
8: BB 19 BB_1
uj5u.com熱心網友回復:
使用dplyr,group_by和整數除法...
library(dplyr)
n <- 3
test |>
group_by(group) |>
mutate(group_n = paste(group, (row_number() n-1) %/% n, sep = "_"))
#> # A tibble: 8 × 3
#> # Groups: group [2]
#> group value group_n
#> <chr> <int> <chr>
#> 1 AA 12 AA_1
#> 2 AA 13 AA_1
#> 3 AA 14 AA_1
#> 4 AA 15 AA_2
#> 5 AA 16 AA_2
#> 6 BB 17 BB_1
#> 7 BB 18 BB_1
#> 8 BB 19 BB_1
使用reprex v2.0.2創建于 2022-10-10
uj5u.com熱心網友回復:
使用ave ceiling(不帶rep)的基本 R 選項
transform(
test,
group_n = ceiling(ave(seq_along(value), group, FUN = seq_along) / 3)
)
給
group value group_n
1 AA 12 1
2 AA 13 1
3 AA 14 1
4 AA 15 2
5 AA 16 2
6 BB 17 1
7 BB 18 1
8 BB 19 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/513418.html
標籤:r数据框
