R 折叠合并行和列的总和

R 折叠合并行和列的总和,r,dplyr,R,Dplyr,由于某些编码,数据集的顺序过于有序。我希望保留这些列,但希望对每个操作进行总结(=21个唯一术语)。为了使其适合于计算程序每个四分位(Q)中出现次数的单行 目标是统计每个Q实例的预测值。数据分为21个动作、4个Q和100个程序。总的计数是目前,我们想削减4件(时间) 我也不介意将所有操作都以删除Q作为一列进行计数 我想要这个,或者这就是我对结果的期望: procedure`action 1 Q1` `action 1 Q2` `action 2 Q1` `action 2 Q2`

由于某些编码,数据集的顺序过于有序。我希望保留这些列,但希望对每个操作进行总结(=21个唯一术语)。为了使其适合于计算程序每个四分位(Q)中出现次数的单行

目标是统计每个Q实例的预测值。数据分为21个动作、4个Q和100个程序。总的计数是目前,我们想削减4件(时间)

我也不介意将所有操作都以删除Q作为一列进行计数

我想要这个,或者这就是我对结果的期望:

   procedure`action 1 Q1` `action 1 Q2` `action 2 Q1` `action 2 Q2`
    <dbl>         <dbl>         <dbl>         <dbl>         <dbl>
 1   1             4             2             2             3
 2   2             2             2             1             5
 3   3             ..            ..            ..            ..


来源:

我相信有更好的方法,但从你离开的地方开始:

df_wide <- df_long %>% spread(action.Q, n, fill=0)
df_wide %>%
  group_by(procedure) %>%
  summarize(`action 1 Q1` = sum(`action 1 Q1`), `action 1 Q2` = sum(`action 1 Q2`), `action 2 Q1` = sum(`action 2 Q1`), `action 2 Q2` = sum(`action 2 Q2`))

注意操作后的“空格”,以避免与
操作
列本身匹配。

预期输出是什么?您好,谢谢您的回复。我有21个动作x 4个Qs,有没有一种不那么手工的方式来写这个?我将在summary()中使用
summary\u at
df\u-wide%%>%groupby(procedure)%%>%summary\u at(vars(start\u with(“action”)),sum)
在R中使用多种方法:df\u-wide%%groupby(procedure)%%>%summary\u-each(funs(sum),start\u with(“action”)action动作就是一个例子,因此“行动”实际上是21种不同行动(授权、指导、说教等)的列表。我本可以说得更清楚,我正在寻找一个通用的解决方案。但我想我可以将其子集并与主数据文件合并。
procedure <- rep(c(rep(1,10), rep(2,10)),2)
Q <- rep(rep(c(rep('Q1',5),rep('Q2',5)),2),2)
action <- rep(rep(paste('action', 1:4),5),2)
df <- data.frame(procedure, Q, action)

library(dplyr)
library(tidyr)

# We can group by procedure, Q and action, and then count the instance with tally().

df_long <- df %>% group_by(procedure, Q, action) %>% tally()
df_long$action.Q <- paste(df_long$action,df_long$Q)

# Now we can use the function spread to create wide dataframe with columns for each combination of Q and action:

df_wide <- df_long %>% spread(action.Q, n, fill=0) %>% select(-c(Q,action))
# A tibble: 10 x 5
# Groups:   procedure, Q [3]
   procedure Q     action       n action.Q   
      <dbl> <fct> <fct>    <int> <chr>      
 1        1 Q1    action 1     4 action 1 Q1
 2        1 Q1    action 2     2 action 2 Q1
 3        1 Q1    action 3     2 action 3 Q1
 4        1 Q1    action 4     2 action 4 Q1
 5        1 Q2    action 1     2 action 1 Q2
 6        1 Q2    action 2     4 action 2 Q2
 7        1 Q2    action 3     2 action 3 Q2
 8        1 Q2    action 4     2 action 4 Q2
 9        2 Q1    action 1     2 action 1 Q1
10        2 Q1    action 2     2 action 2 Q1
df_wide <- df_long %>% spread(action.Q, n, fill=0)
df_wide %>%
  group_by(procedure) %>%
  summarize(`action 1 Q1` = sum(`action 1 Q1`), `action 1 Q2` = sum(`action 1 Q2`), `action 2 Q1` = sum(`action 2 Q1`), `action 2 Q2` = sum(`action 2 Q2`))
df_wide %>%
  group_by(procedure) %>%
  summarize_at(vars(starts_with("action ")), sum)