R 如何基于因子创建多路表?
我一直在尝试根据因子数据创建带有结果的多路表 我的数据如下所示:R 如何基于因子创建多路表?,r,data-manipulation,presentation,R,Data Manipulation,Presentation,我一直在尝试根据因子数据创建带有结果的多路表 我的数据如下所示: 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
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()等因素生成多路频率表。这不是我要找的。也许我用错了关键词,或者在这个问题上有更多的信息
手动操作是一种选择,但不是首选。此外,我不是第一个需要这样做的人,所以我知道有办法 找不到合适的dupe,下面是如何排列和重新排列列的。诀窍是将
Room
和Trial
变量指定为输出列。使用tidyr
的一组新函数,pivot\u wired/pivot\u long
,这一点特别容易。传播之后,一个简单的正则表达式可以帮助您按照所需的格式对列进行排序,即
library(dplyr)
library(tidyr)
df %>%
pivot_wider(id_cols = Mechanism, names_from = c(Room, Trial), values_from = Result) %>%
select(1, order(sub('_.*', '', names(.))))
这就给了,
#一个tible:2 x 5
机构'1_A``1_B``2_A``2_B`
1直0,50.6 0.7 0.6
2弯曲0,2 0.2 0.3 0.2
找不到合适的dupe,下面是如何排列和重新排列列的。诀窍是将
Room
和Trial
变量指定为输出列。使用tidyr
的一组新函数,pivot\u wired/pivot\u long
,这一点特别容易。传播之后,一个简单的正则表达式可以帮助您按照所需的格式对列进行排序,即
library(dplyr)
library(tidyr)
df %>%
pivot_wider(id_cols = Mechanism, names_from = c(Room, Trial), values_from = Result) %>%
select(1, order(sub('_.*', '', names(.))))
这就给了,
#一个tible:2 x 5
机构'1_A``1_B``2_A``2_B`
1直0,50.6 0.7 0.6
2弯曲0,2 0.2 0.3 0.2
此处填写的是
数据。表
带有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
此处填写的是
数据。表
带有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
这是一个基本的R解决方案,其中使用
reformate()
重新格式化数据帧
df <- df[with(df,order(Room,Trial)),]
dfout <- reshape(within(df,RT <- apply(df[1:2],1,paste0,collapse = ""))[-(1:2)],
idvar = "Mechanism",
timevar = "RT",
direction = "wide")
数据
df <- structure(list(Trial = c("A", "A", "B", "B", "A", "A", "B", "B"
), Room = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Mechanism = c("Straight",
"Bendy", "Straight", "Bendy", "Straight", "Bendy", "Straight",
"Bendy"), Result = c(0.5, 0.2, 0.6, 0.2, 0.7, 0.3, 0.6, 0.2)), row.names = c(1L,
2L, 5L, 6L, 3L, 4L, 7L, 8L), class = "data.frame")
df这是一个基本的R解决方案,其中restrape()
用于重新格式化数据帧
df <- df[with(df,order(Room,Trial)),]
dfout <- reshape(within(df,RT <- apply(df[1:2],1,paste0,collapse = ""))[-(1:2)],
idvar = "Mechanism",
timevar = "RT",
direction = "wide")
数据
df <- structure(list(Trial = c("A", "A", "B", "B", "A", "A", "B", "B"
), Room = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Mechanism = c("Straight",
"Bendy", "Straight", "Bendy", "Straight", "Bendy", "Straight",
"Bendy"), Result = c(0.5, 0.2, 0.6, 0.2, 0.7, 0.3, 0.6, 0.2)), row.names = c(1L,
2L, 5L, 6L, 3L, 4L, 7L, 8L), class = "data.frame")
df可能:库(重塑);cast(df,Mechanism~Trial+Room,value='Result')
Maybe:library(重塑);铸造(df,机械装置~试验+试验室,值='结果')