[英]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_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", "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.