使用 dplyr 的数据框 reshape/transpose

Dataframe reshape/transpose using dplyr

我有以下格式的数据框 Original format

对于给定的ID;年龄、性别和地位保持不变。

我想做几个转换

  1. "Id" 和 "Type" 各占一行。
  2. 在 "Tablet" 列中查找唯一值并进行转置。
  3. 转置 "Level" 列,并在新转置的 tablet column.Empty 单元格中对应每个 tablet 的值必须填充 "NA"。

下面附上所需的输出格式以供参考。desired format

我尝试过使用 dcast 和 reshape; tidyr 和 dplyr 使用 gather 和 spread,但是我无法实现第三次转换

任何帮助都会很棒!谢谢

可以使用tidyr包中的spread()函数:

设置包和数据:

library(dplyr)
library(tidyr)


 df=data.frame(
  id=c(1,1,1,1,1,2,2),
  age=c(3,3,3,3,3,51,51),
  sex=c('f','f','f','f','f','m','m'),
  type=c('a','a','a','b','b','a','a'),
  tablet=c('t1','t2','t3','t1','t5','t3','t10'),
  level=c(1,2,3,1,4,2,3),
  status=c('n','n','n','n','n','y','y')
  )

使用 group_by() 按 ID 和类型获取结果。

使用 spread() 转置数据,其中 tablet 列包含列名称的键,level 列包含值。 spread()默认用NA填空。

使用 select() 将列重新排列为所需格式:

df %>% 
  group_by(id,type) %>% 
  spread(tablet, level) %>% 
  select(id,age,sex,type,t1,t2,t3,t5,t10,status)