簡體   English   中英

R pivot_wider 或 dcast 投射多列

[英]R pivot_wider or dcast to cast multiple columns

我正在嘗試將多個長數據集( 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()

我們可以使用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))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM