如何根据分组依据和R中的顺序将字符添加到列中每个字符串的末尾?

How to add characters to the end of each string in column based on group by and order in R?

我有一个 table 看起来像这样:

Injury BL Time Delay (sec) Acute Time Delay (sec) Chronic Time Delay (sec) Acute Area Deficit (mm2)
1  Moderate                0.35                   1.10                     0.60                     1.84
2    Severe                0.42                   1.47                     0.86                     3.04
3  Moderate                0.45                   1.02                     0.65                     1.80
4  Moderate                0.42                   0.97                     0.70                     1.76
5    Severe                0.40                   1.55                     0.80                     3.12
6  Moderate                0.37                   0.96                     0.65                     1.65
7    Severe                0.32                   1.64                     0.75                     3.34
8    Severe                0.40                   1.44                     0.90                     3.24
9  Moderate                0.47                   1.01                     0.82                     1.77
10 Moderate                0.41                   0.90                     0.67                     1.51
11 Moderate                0.38                   0.86                     0.57                     1.78
12   Severe                0.39                   1.59                     0.70                     3.27

我想做的是根据组(Server_1、Moderate_1、Severe_2、Moderate_2、等等)。

当前代码是这样的,但它没有明确地将它添加到每个值,所以我的输出都是'_1'

my_data[] <- lapply(my_data, function(x) paste("1", x, sep="_"))


Injury BL Time Delay (sec) Acute Time Delay (sec) Chronic Time Delay (sec) Acute Area Deficit (mm2)
1  1_Moderate                0.35                   1.10                     0.60                     1.84
2    1_Severe                0.42                   1.47                     0.86                     3.04
3  1_Moderate                0.45                   1.02                     0.65                     1.80
4  1_Moderate                0.42                   0.97                     0.70                     1.76

我想使用 group_by 和管道,但出现错误并且不知道如何将每个组称为不同的值,这给了我一个错误。

update_df <- my_data %>%
  group_by(Injury) %>%
  lapply(function(x) paste("1", x, sep="_")) %>%
  mutate_if(is.character, factor)

我猜您是在寻找每次伤害的累积外观:

my_data <- tibble(Injury = c("Injury", "Moderate", "Severe", "Moderate", "Moderate", 
  "Severe", "Moderate", "Severe", "Severe", "Moderate", "Moderate", "Moderate", "Severe"))

my_data %>%
  group_by(Injury) %>%
  mutate(Injury_num = paste(Injury, row_number(), sep = "_")) %>%
  mutate(num_Injury = paste(row_number(), Injury, sep = "_")) %>%
  ungroup()

结果

# A tibble: 13 x 3
   Injury   Injury_num num_Injury
   <chr>    <chr>      <chr>     
 1 Injury   Injury_1   1_Injury  
 2 Moderate Moderate_1 1_Moderate
 3 Severe   Severe_1   1_Severe  
 4 Moderate Moderate_2 2_Moderate
 5 Moderate Moderate_3 3_Moderate
 6 Severe   Severe_2   2_Severe  
 7 Moderate Moderate_4 4_Moderate
 8 Severe   Severe_3   3_Severe  
 9 Severe   Severe_4   4_Severe  
10 Moderate Moderate_5 5_Moderate
11 Moderate Moderate_6 6_Moderate
12 Moderate Moderate_7 7_Moderate
13 Severe   Severe_5   5_Severe