使用 dplyr 的数据框 reshape/transpose
Dataframe reshape/transpose using dplyr
我有以下格式的数据框
Original format
对于给定的ID;年龄、性别和地位保持不变。
我想做几个转换
- "Id" 和 "Type" 各占一行。
- 在 "Tablet" 列中查找唯一值并进行转置。
- 转置 "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)
我有以下格式的数据框 Original format
对于给定的ID;年龄、性别和地位保持不变。
我想做几个转换
- "Id" 和 "Type" 各占一行。
- 在 "Tablet" 列中查找唯一值并进行转置。
- 转置 "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)