如何基于因素创建多路表?

问题描述 投票:0回答:2

我一直在尝试根据因子数据创建具有结果的多路表格。

我的数据如下:

Trial    Room    Mechanism    Result
A        1       Straight     0,5
A        1       Bendy        0,2
A        2       Straight     0.7
A        2       Bendy        0.3
B        1       Straight     0.6
B        1       Bendy        0.2
B        2       Straight     0.6
B        2       Bendy        0.2

实际上有大约6个因子具有多个级别和一列结果。

我正在寻找的结果是这样的:

           Room 1      Room 2   
           A    B      A     B   
Straight  0.5   0.6    0.7   0.6
Bendy     0.2   0.2    0.3   0.2


是否有执行此操作的功能或程序包?

所有搜索结果都产生了代码,可以根据诸如data.table()或count()之类的因素制作多路频率表。这不是我想要的。也许我使用了错误的关键词,或者关于该问题的更多信息。

手动进行此操作是一种选择,但不是首选。而且我不是第一个需要这样做的人,所以我知道有办法!

r data-manipulation presentation
2个回答
1
投票

找不到合适的重复项,因此这是您如何分散和重新排列列的方法。技巧是将RoomTrial变量都分配为输出列。通过tidyr的新功能集pivot_wider/pivot_longer,这特别容易。展开后,一个简单的正则表达式可以帮助您按所需的格式订购该列,即

library(dplyr)
library(tidyr)

df %>% 
 pivot_wider(id_cols = Mechanism, names_from = c(Room, Trial), values_from = Result) %>% 
 select(1, order(sub('_.*', '', names(.))))

给出,

# A tibble: 2 x 5
  Mechanism `1_A` `1_B` `2_A` `2_B`
  <fct>     <fct> <fct> <fct> <fct>
1 Straight  0,5   0.6   0.7   0.6  
2 Bendy     0,2   0.2   0.3   0.2  

0
投票

为了完成,这里是data.table版本,带有dcast

library(data.table)
dcast(setDT(df), Mechanism~paste0('Room', Room) + Trial, value.var = 'Result')

#   Mechanism Room1_A Room1_B Room2_A Room2_B
#1:     Bendy     0,2     0.2     0.3     0.2
#2:  Straight     0,5     0.6     0.7     0.6
© www.soinside.com 2019 - 2024. All rights reserved.