【问题标题】:Repeat values down a grouping column using R使用 R 在分组列中重复值
【发布时间】:2022-01-16 07:21:15
【问题描述】:

我有以下data.frame:

df <- data.frame(value = 1:23)

df |> 
  mutate(group = case_when(value < 4 ~ "A",
                           value >= 4 &  value < 18 ~ "B",
                           value >= 18 & value <= 23 ~ "C"))

我想使用 mutate 再添加两列。第一个对每个组重复模式 c("white", "black") n 次

期望的结果:

   value group  color
1      1     A  white
2      2     A  black
3      3     A  white
4      4     B  white
5      5     B  black
6      6     B  white
7      7     B  ...
8      8     B
9      9     B
10    10     B
11    11     B
12    12     B
13    13     B
14    14     B
15    15     B
16    16     B
17    17     B
18    18     C  white
19    19     C  black
20    20     C  white
21    21     C  ...
22    22     C
23    23     C

第二列对每组重复模式 1:nrows 两次。

   value group  color distance
1      1     A  white 1
2      2     A  black 1
3      3     A  white 2
4      4     B  white 1
5      5     B  black 1
6      6     B  white 2
7      7     B  ...   2
8      8     B        3
9      9     B        3
10    10     B        4
11    11     B        4
12    12     B        5 
13    13     B        5
14    14     B        6
15    15     B        6
16    16     B        7
17    17     B        7
18    18     C  white 1
19    19     C  black 1
20    20     C  white 2
21    21     C  ...   2
22    22     C        3
23    23     C        3

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可能想要使用以下内容:

    library(dplyr)
    
    df <- data.frame(value = 1:23)
    
    df %>% 
      mutate(group = case_when(value < 4 ~ "A",
                               value >= 4 &  value < 18 ~ "B",
                               value >= 18 & value <= 23 ~ "C")) %>% 
      group_by(group) %>% 
      mutate(color = if_else(row_number() %% 2 == 1, "white", "black"),
             distance = rep(1:n(), each =2)[1:n()]) %>% 
      ungroup
    
    #> # A tibble: 23 × 4
    #>    value group color distance
    #>    <int> <chr> <chr>    <int>
    #>  1     1 A     white        1
    #>  2     2 A     black        1
    #>  3     3 A     white        2
    #>  4     4 B     white        1
    #>  5     5 B     black        1
    #>  6     6 B     white        2
    #>  7     7 B     black        2
    #>  8     8 B     white        3
    #>  9     9 B     black        3
    #> 10    10 B     white        4
    #> # … with 13 more rows
    

    【讨论】:

    • 谢谢!聪明的解决方案,如果我想添加另一列重复 1:每组的行数两次,如下所示?值组 颜色值 1 1 A 白色 1 2 2 A 黑色 1 3 3 A 白色 2 4 4 B 白色 1 5 5 B 黑色 1 6 6 B 白色 2 7 7 B ... 2 8 8 B 3 9 9 B 3 18 18 C 白色 1 19 19 C 黑色 1 20 20 C 白色 2 21 21 C ... 2
    • 不客气,@PabloAB。你具体是什么意思?复制列value?
    • 我已经修改了问题以便更容易理解
    • 我刚刚相应地编辑了我的答案。我希望这对你有帮助,@PabloAB!
    • 哇,感谢您的及时回复@Paul Smith。你帮了我很多!
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2016-12-09
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多