我试图将长格式的专栏扩展到宽格式,如下所示.我想用tidyr来解决我正在投资的数据处理工具的问题,但为了让这个答案更一般,请提供其他解决方案.

以下是我所拥有的:

library(dplyr); library(tidyr)

set.seed(10)
dat <- data_frame(
    Person = rep(c("greg", "sally", "sue"), each=2),
    Time = rep(c("Pre", "Post"), 3),
    Score1 = round(rnorm(6, mean = 80, sd=4), 0),
    Score2 = round(jitter(Score1, 15), 0),
    Score3 = 5 + (Score1 + Score2)/2
)

##   Person Time Score1 Score2 Score3
## 1   greg  Pre     80     78   84.0
## 2   greg Post     79     80   84.5
## 3  sally  Pre     75     74   79.5
## 4  sally Post     78     78   83.0
## 5    sue  Pre     81     78   84.5
## 6    sue Post     82     81   86.5

所需的宽幅格式:

  Person Pre.Score1 Pre.Score2 Pre.Score3  Post.Score1 Post.Score2 Post.Score3
1   greg         80         78       84.0           79          80        84.5
2  sally         75         74       79.5           78          78        83.0
3    sue         81         78       84.5           82          81        86.5

我可以通过 for each 分数做这样的事情:

spread(dat %>% select(Person, Time, Score1), Time, Score1) %>% 
    rename(Score1_Pre = Pre, Score1_Post = Post)

然后使用_join,但这似乎很冗长,而且肯定有更好的方法.

Related questions:
tidyr wide to long with two repeated measures
Is it possible to use spread on multiple columns in tidyr similar to dcast?

推荐答案

编辑:我正在更新这个答案,因为pivot_wider已经存在了一段时间,并在这个问题和 comments 中解决了这个问题.你现在可以做了

pivot_wider(
    dat, 
    id_cols = 'Person', 
    names_from = 'Time', 
    values_from = c('Score1', 'Score2', 'Score3'), 
    names_glue = '{Time}.{.value}'
)

以获得期望的结果.


最初的答案是

dat %>% 
  gather(temp, score, starts_with("Score")) %>% 
  unite(temp1, Time, temp, sep = ".") %>% 
  spread(temp1, score)

R相关问答推荐

将收件箱变量传递给ggplot 2函数

如何使用TukeyHSD绘制事后概率热图

使用case_when和Mutate搜索多个列以寻找条件

如何使用ggplot重新绘制LASO回归图?

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

根据shiny 应用程序中的数字输入更改图标 colored颜色

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

编辑文件后编辑RhandsonTable

格点中指数、双曲和反双曲模型曲线的正确绘制

在特定Quarto(reveal.js)幻灯片上隐藏徽标

如何动态更新selectizeInput?

Rplotly中的Sankey Diagram:意外连接&

如何在Chart_Series()中更改轴值的 colored颜色 ?

可以替代与NSE一起使用的‘any_of()’吗?

您是否可以折叠R中的重复行,同时保留基于所选列的值?

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

如何在R中使用hmm TMB提前一步预测观察到的状态?

当每个变量值只能 Select 一次时,如何从数据框中 Select 两个变量的组合?

如何使投篮在R中保持一致