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