如何解决R pivot_wider 或 dcast 来投射多列 数据
我正在尝试将多个长数据集 (read_csv
) 转换为宽数据。原始样本数据如下:
ClassData <- read_csv("H:/Name Data.csv")
NAME CATEGORY NUMBER_CATEGORY
Amy Low 180
Amy Med 185
John Low 118
John Med 182
John Med 185
我想要以下内容:
NAME CATEGORY 1 NUMBER_CATEGORY 1 CATEGORY 2 NUMBER_CATEGORY 2 CATEGORY 3 NUMBER_CATEGORY 3
Amy Low 180 Med 185 NULL NULL
John Low 118 Med 182 Med 185
有没有办法通过 pivot_wider
、dcast
和/或 melt
实现这一目标?我也对 gather()
和 spread()
持开放态度。
解决方法
我们可以使用pivot_wider
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(rn = rowid(NAME)) %>%
pivot_wider(names_from = rn,values_from = c(CATEGORY,NUMBER_CATEGORY))
-输出
# A tibble: 2 x 7
# NAME CATEGORY_1 CATEGORY_2 CATEGORY_3 NUMBER_CATEGORY_1 NUMBER_CATEGORY_2 NUMBER_CATEGORY_3
# <chr> <chr> <chr> <chr> <int> <int> <int>
#1 Amy Low Med <NA> 180 185 NA
#2 John Low Med Med 118 182 185
数据
df1 <- structure(list(NAME = c("Amy","Amy","John","John"),CATEGORY = c("Low","Med","Low","Med"),NUMBER_CATEGORY = c(180L,185L,118L,182L,185L)),class = "data.frame",row.names = c(NA,-5L))
,
在基础 R 中,您可以:
reshape(transform(df,time = ave(NAME,NAME,FUN = seq)),v.names = c("CATEGORY","NUMBER_CATEGORY"),dir="wide",idvar = "NAME",sep = "_")
NAME CATEGORY_1 NUMBER_CATEGORY_1 CATEGORY_2 NUMBER_CATEGORY_2 CATEGORY_3 NUMBER_CATEGORY_3
1 Amy Low 180 Med 185 <NA> NA
3 John Low 118 Med 182 Med 185
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。