我試圖將具有特定型別的記錄匯總到后續記錄中。
我有一個類似于以下的資料集:
我有一個類似于以下的資料集:
df_initial <- data. frame("Id" = c(1。 2。 3, 4。 5),
"quantity" = c(105, 110。 100, 115。 120),
"Type" = c("A"/span>。 "B"/span>。 "B", "A"。 "A"),
"Difference" = c(30。 34。 32, 30。 34))
在對Id欄位進行排序后,我想將型別="B "的記錄匯總到型別="A "的下一個記錄中。
換句話說,我想創建df_new,它將Id 2和3的Qty和Difference值添加到Id 4的Qty和Difference值中,并將Id 4標記為被調整(在AdjustedFlag區域)。
df_new <- data. frame("Id" = c(1。 4, 5),
"quantity" = c(105, 325, 120),
"Type" = c("A"/span>。 "A", "A"), "A" ,
"Difference" = c(30。 96, 34),
"AdjustedFlag" = c(0。 1, 0))
我非常感謝任何關于如何在R中做到這一點的建議或想法,最好是使用data.table。
uj5u.com熱心網友回復:
一個data.table的解決方案:
df_initial[, .()
Id = Id[. N]。 數量= sum(Qty),
差額 = sum(Difference)/span>,
AdjustedFlag = (.N >/span> 1)
),由=. (grp = rev(cumsum(rev(Type == "A"))))
][,grp 。 = NULL][/span>]
# Id Quantity Difference AdjustedFlag。
# <num> <num> <num> <int>
# 1: 1 105 30 0
# 2: 4 325 96 1
# 3: 5 120 34 0
uj5u.com熱心網友回復:
這可以通過創建一個新的分組變數來解決,該變數將行分為你所描述的組,其目的是利用該分組變數來實作所需的聚合。
而不是有
A B B A A
那個新的分組變數看起來應該是這樣的:
1 2 2 3
這不是一個data.table的解決方案,但同樣的邏輯可以應用在那里:
library(tidyverse)
df_initial |>
mutate()
type2 = ifelse(Type == "A"。 作為。 numeric(factor(Type))。 0),
type2 = cumsum(type2)/span>,
type2 = ifelse(Type == "B"。 NA, type2)
) |>
填充(type2, . direction = "up") |>.
group_by(type2) |>
summarise()
id = max(Id),
數量 = sum(Qty),
差額 = sum(Difference)/span>,
AdjustedFlag = as. numeric(n() > 1)
)
#> # A tibble: 3 × 5
#> type2 id 數量差異 調整后的Flag。
#> <dbl> <dbl> <dbl> <dbl>/span>
#> 1 1 1 105 30 0
#> 2 2 4 325 96 1
#> 3 3 5 120 34 0
uj5u.com熱心網友回復:
使用tidyverse
df_initial %> %
mutate(gn = if_else(lag(type, 默認= 'A') == 'B' 'B' | Type == 'B'。 'B', Type),
gr = cumsum(lag(gn。 默認= 'A') ! = gn),
調整= if_else(lag(Type。 默認= 'A') == 'B' 'B' | Type == 'B'。 1, 0)) %> %
group_by(gr) %> %
summarise(Id = last(Id),
數量 = sum(Qty),
型別 = 'A,
差額 = sum(Difference),/span>
Adjusted_flg = max(調整)) %> %ungroup()
在這里,我們創建了一個臨時資料集,它看起來像:
。 Id 數量型別 差異 gn gred
1 1 105 A 30 A0 0
2 2 110 B 34 B1 0
3 3 100 B 32 B1 0
4 4 115 A 30 B1 1
5 5 120 A 34 A 2 0
并使用這個來創建我們在summarise中的最后一個表。gr是用于表示一組值的列,這就是為什么我們group_by它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/332230.html
標籤:
上一篇:從寬到長的格式,多列到一列
