【问题标题】:Perform an operation within grouped pairs in tidyverse在 tidyverse 中的分组对内执行操作
【发布时间】:2021-12-14 18:19:13
【问题描述】:

我有一个数据集,其中包含按两个变量分组的三列。

df <- tibble(paper = rep(c("A_2012", "B_2019"), each = 5), 
       question = rep(c(1,2,3,4,5), 2), 
       rate = c(4.545455, 4.010000, 4.672727, 4.100000, 3.418182, 3.060000,
         4.563636, 3.760000, 4.636364, 4.000000))

> df %>% group_by(question) %>% 
select(question, paper, rate) %>% 
arrange(question)

# A tibble: 10 x 3
# Groups:   question [5]
  question    paper   rate
   <dbl>     <.chr>  <dbl>
 1  1        A_2012   4.55
 2  1        B_2019   3.06
 3  2        A_2012   4.01
 4  2        B_2019   4.56
 5  3        A_2012   4.67
 6  3        B_2019   3.76
 7  4        A_2012   4.1 
 8  4        B_2019   4.64
 9  5        A_2012   3.42
10  5        B_2019   4   

我需要在组的“速率”值内执行操作。但实际上,我不知道如何使用tidyverse 样式编写代码。在这个例子中,我会得到每个问题的差异(paperB - paperA):

    > df_result
    # A tibble: 5 x 2
     question diff_rate
       <dbl>     <dbl>
1        1     -1.49
2        2      0.55
3        3     -0.91
4        4      0.54
5        5      0.58

我尝试过使用pivot_wider然后进行一些操作,但实际上我有 54 个不同的值用于变量纸,所以效率不高。 任何帮助都非常感谢。

【问题讨论】:

    标签: r group-by tidyverse


    【解决方案1】:

    你可以的

    df %>% group_by(question) %>% 
      select(question, paper, rate) %>% 
      arrange(question) %>% mutate(
        diff_rate=diff(rate)
    

    如果您想要与 df_result 相同的格式,您可以这样做

    df %>% group_by(question) %>% 
      select(question, paper, rate) %>% 
      arrange(question) %>% mutate(
        diff_rate=diff(rate)
      ) %>% select(question, diff_rate) %>% distinct()
    

    【讨论】:

    • 它有效。谢谢@R_newbie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2020-06-02
    • 2013-07-27
    相关资源
    最近更新 更多