[英]how to unstack a long column with uneven number of rows in r and name the columns
我在一長列中有一個嵌套數據。 數據代表不同商店的不同庫存商品。 每個項目有 3 個值,分別表示為數量 (A)、類型 (B) 和有效期 (C)。 例如,如果我們拿三個商店,項目以數字 1,2,3 列出,然后為下一個商店 1,2,3,4,5 和接下來的 1,2 等。這是一個例子好像:
df=c('1','A','B','C','2','A','B','C','1','A','B','C','1','A','B','C','2','A','B','C','3','A','B','C')
as.data.frame(df)
這是我試圖將其顯示為
|No |Qty|Typ|Exp|No |Qty|Typ|Exp|No |Qty|Typ|Exp|
|1 |A | B | C | 2 | A | B | C |
|1 |A | B | C | 2 | A | B | C |
|1 |A | B | C | 2 | A | B | C | 3 | A | B | C |
感謝您的幫助
你可以試試tidyverse
library(tidyverse)
as.data.frame(df) %>%
mutate(V2 = cumsum(df == "1")) %>%
group_by(V2) %>%
mutate(V4 = 1:n()) %>%
pivot_wider(names_from = V4, values_from = df, names_prefix = "Item") %>%
ungroup() %>%
select(-V2)
# A tibble: 3 x 9
Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 A B C 2 A B NA NA
2 1 A B C D NA NA NA NA
3 1 A 2 A B C 3 A B
使用基礎 R 的可能解決方案:
df=c('1','A','B','C','2','A','B','C','1','A','B','C','1','A','B','C','2','A','B','C','3','A','B','C')
df <- data.frame(V=df)
idx <- which(df$V == 1)
n <- length(idx)
leng <- idx[-1]-idx[-n]
leng <- c(leng,length(df$V)-idx[n]+1)
l <- split(df$V, rep(1:n, leng))
l <- lapply(l, `length<-`, max(lengths(l)))
as.data.frame(do.call(rbind,l))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.