MeC*_*MeC 1 r dataframe dplyr mutate
我想使用 dplyr::mutate 用索引号替换唯一值。
我按几个不同的变量分组以访问我的数据帧的适当子集。
head(df)
group start_time end_time
1 group1 0 0.4
2 group1 0 0.4
3 group1 0 0.4
4 group1 0.4 0.8
5 group1 0.4 0.8
6 group2 0.0 0.4
7 group2 0.4 0.8
8 group2 0.8 1.02
Run Code Online (Sandbox Code Playgroud)
我 group_by 'group',然后按 'start_time'。有时一个给定的组只有一个 start_time,有时两个 start_time,有时三个。我需要为每个唯一的 start_time 创建一个新变量“idx”。但我想不出怎么做。
new_df <- df %>%
group_by(group, start_time) %>%
mutate(idx = row_number()) %>%
as.data.frame
Run Code Online (Sandbox Code Playgroud)
使用 row_number() 创建一个新变量是不对的。它给了我:
idx
1
2
3
1
2
1
1
1
Run Code Online (Sandbox Code Playgroud)
但我想要:
idx
1
1
1
2
2
1
2
3
Run Code Online (Sandbox Code Playgroud)
我想用一个数字替换 group_by 中的每个唯一值?并重复?
我们可以match在按“组”分组后使用
library(tidyverse)
df %>%
group_by(group) %>%
mutate(idx = match(start_time, unique(start_time)))
# A tibble: 8 x 4
# Groups: group [2]
# group start_time end_time idx
# <chr> <dbl> <dbl> <int>
#1 group1 0 0.4 1
#2 group1 0 0.4 1
#3 group1 0 0.4 1
#4 group1 0.4 0.8 2
#5 group1 0.4 0.8 2
#6 group2 0 0.4 1
#7 group2 0.4 0.8 2
#8 group2 0.8 1.02 3
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是 group_indices
df %>%
group_split(group) %>%
map_df(~ .x %>%
mutate(idx = group_indices(., start_time)))
Run Code Online (Sandbox Code Playgroud)
注意:如果需要在 'group' 之外创建 'idx',则删除该group_by步骤
注意2:在OP的示例中,两者(有/没有group_by)给出相同的输出
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |