gpt4 book ai didi

r - 通过排列两个变量(dplyr)添加计数器列

转载 作者:行者123 更新时间:2023-12-04 12:26:42 26 4
gpt4 key购买 nike

我已经在这里和那里寻找了一段时间,但我找不到适合我的情况的任何解决方案。我有一个混合了 ID 和 VAR 的数据框。下面我试着复制了一个样本

require(dplyr)
seed(123)
N <- 3
T <- 4
id <- rep(letters[1:N], each = T)
var <- rep(sample(seq(1:100),T),N)
row <- sample(seq(1:(N*T)),replace = F)

dt <- data.frame(ID=id,VAR=var,ROW=row) %>%
arrange(ROW) %>%
select(-ROW)

我想按 ID 和 VAR 安排,并为每个组添加一个计数器以获得类似的东西

   ID VAR COUNTER
1 a 1 1
2 a 11 2
3 a 22 3
4 a 64 4
5 b 1 1
6 b 11 2
7 b 22 3
8 b 64 4
9 c 1 1
10 c 11 2
11 c 22 3
12 c 64 4

所有这些,如果可能的话,只需使用 dplyr 或基本函数。

最佳答案

dplyr 中,您需要通过 IDVAR 进行 arrange(),然后通过 group_by( ) 只是 ID

然后您使用 mutate() 添加一个新列,从 1 计数到 n()(其中 n() 是一个'行数'的 dplyr 函数)

set.seed(123)
dt %>%
arrange(ID, VAR) %>%
group_by(ID) %>%
mutate(COUNTER = 1:n()) %>% ## as per comment, can use row_number()
ungroup()

# # A tibble: 12 × 3
# ID VAR COUNTER
# <fctr> <int> <int>
# 1 a 29 1
# 2 a 41 2
# 3 a 79 3
# 4 a 86 4
# 5 b 29 1
# 6 b 41 2
# 7 b 79 3
# 8 b 86 4
# 9 c 29 1
# 10 c 41 2
# 11 c 79 3
# 12 c 86 4

关于取消分组的评论

我这样做是为了删除与 grouped_df 关联的所有“分组”属性。在此示例中,结果是相同的,但那些分组的属性可能会进一步影响您。

dt_grouped <- dt %>%
arrange(ID, VAR) %>%
group_by(ID) %>%
mutate(COUNTER = 1:n())

dt_ungrouped <- dt %>%
arrange(ID, VAR) %>%
group_by(ID) %>%
mutate(COUNTER = 1:n()) %>%
ungroup()

str(dt_grouped)
# Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 12 obs. of 3 variables:
# $ ID : Factor w/ 3 levels "a","b","c": 1 1 1 1 2 2 2 2 3 3 ...
# $ VAR : int 29 41 79 86 29 41 79 86 29 41 ...
# $ COUNTER: int 1 2 3 4 1 2 3 4 1 2 ...
# - attr(*, "vars")=List of 1
# ..$ : symbol ID
# - attr(*, "labels")='data.frame': 3 obs. of 1 variable:
# ..$ ID: Factor w/ 3 levels "a","b","c": 1 2 3
# ..- attr(*, "vars")=List of 1
# .. ..$ : symbol ID
# ..- attr(*, "drop")= logi TRUE
# - attr(*, "indices")=List of 3
# ..$ : int 0 1 2 3
# ..$ : int 4 5 6 7
# ..$ : int 8 9 10 11
# - attr(*, "drop")= logi TRUE
# - attr(*, "group_sizes")= int 4 4 4
# - attr(*, "biggest_group_size")= int 4

str(dt_ungrouped)
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 12 obs. of 3 variables:
# $ ID : Factor w/ 3 levels "a","b","c": 1 1 1 1 2 2 2 2 3 3 ...
# $ VAR : int 29 41 79 86 29 41 79 86 29 41 ...
# $ COUNTER: int 1 2 3 4 1 2 3 4 1 2 ...

关于r - 通过排列两个变量(dplyr)添加计数器列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45045180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com