我一直在尝试根据因子数据创建具有结果的多路表格。
我的数据如下:
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()之类的因素制作多路频率表。这不是我想要的。也许我使用了错误的关键词,或者关于该问题的更多信息。
手动进行此操作是一种选择,但不是首选。而且我不是第一个需要这样做的人,所以我知道有办法!
找不到合适的重复项,因此这是您如何分散和重新排列列的方法。技巧是将Room
和Trial
变量都分配为输出列。通过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
为了完成,这里是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