【问题标题】:R pivot_wider or dcast to cast multiple columnsR pivot_wider 或 dcast 投射多列
【发布时间】:2021-07-29 00:40:24
【问题描述】:

我正在尝试将多个长数据集 (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_widerdcast 和/或melt 实现这一目标?我也对gather()spread() 持开放态度。

【问题讨论】:

  • 嗨!请提供您的数据集的可重现示例(您可以在数据子集上复制输出 od dput() 函数:dput(head(df))

标签: r pivot reshape


【解决方案1】:

我们可以使用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", "John"), 
    CATEGORY = c("Low", "Med", "Low", "Med", "Med"), NUMBER_CATEGORY = c(180L, 
    185L, 118L, 182L, 185L)), class = "data.frame", row.names = c(NA, 
-5L))

【讨论】:

    【解决方案2】:

    在基础 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-02
      • 2014-11-19
      • 2017-06-19
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多