簡體   English   中英

如何解開 r 中行數奇數的長列並命名列

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

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