Мне нужно создать модифицированный набор данных, сгруппировав несколько строк вместе. Мне нужно это с 3 требованиями:
(посмотрите на изображение ниже, чтобы понять названия столбцов)
Я мог бы сделать это вручную, как вы можете видеть на изображении, но я не смог найти способ масштабировать это.
Может ли кто-нибудь помочь с тем, какие инструменты для обработки данных лучше всего подходят для решения такой проблемы?
Для воспроизведения первого набора данных:
structure(list(date_time = structure(c(1517516099, 1517516099,
1517516099, 1517516099, 1517516095, 1517516092, 1517516092, 1517516092,
1517516092, 1517516092, 1517516092, 1517516088, 1517516084, 1517516081,
1517516074, 1517516073, 1517516071, 1517516068, 1517516061, 1517516053
), class = c("POSIXct", "POSIXt"), tzone = ""), Buyer_from = c("127 - TULLETT PREBON",
"127 - TULLETT PREBON", "127 - TULLETT PREBON", "3 - XP Investimentos CCTVM S/A",
"85 - BTG Pactual CTVM S.A.", "85 - BTG Pactual CTVM S.A.", "147 - ATIVA INVESTIMENTOS S.A. CTCV",
"147 - ATIVA INVESTIMENTOS S.A. CTCV", "147 - ATIVA INVESTIMENTOS S.A. CTCV",
"147 - ATIVA INVESTIMENTOS S.A. CTCV", "147 - ATIVA INVESTIMENTOS S.A. CTCV",
"147 - ATIVA INVESTIMENTOS S.A. CTCV", "147 - ATIVA INVESTIMENTOS S.A. CTCV",
"115 - H.COMMCOR DTVM LTDA", "115 - H.COMMCOR DTVM LTDA", "8 - UBS BRASIL CCTVM S/A",
"3 - XP Investimentos CCTVM S/A", "8 - UBS BRASIL CCTVM S/A",
"8 - UBS BRASIL CCTVM S/A", "8 - UBS BRASIL CCTVM S/A"), Price = c(3176.5,
3176.5, 3176.5, 3176.5, 3177, 3177, 3177.5, 3177.5, 3177.5, 3177.5,
3177.5, 3177.5, 3177.5, 3177.5, 3177.5, 3178, 3178.5, 3178, 3178,
3178), Quantity = c(10, 5, 50, 5, 5, 5, 55, 5, 5, 5, 30, 70,
30, 10, 10, 5, 5, 10, 5, 10), Seller_from = c("85 - BTG Pactual CTVM S.A.",
"122 - BGC LIQUIDEZ DTVM", "85 - BTG Pactual CTVM S.A.", "3 - XP Investimentos CCTVM S/A",
"88 - CM Capital Markets CCTVM LTDA", "122 - BGC LIQUIDEZ DTVM",
"122 - BGC LIQUIDEZ DTVM", "122 - BGC LIQUIDEZ DTVM", "8 - UBS BRASIL CCTVM S/A",
"8 - UBS BRASIL CCTVM S/A", "92 - RENASCENÇA DTVM LTDA", "92 - RENASCENÇA DTVM LTDA",
"85 - BTG Pactual CTVM S.A.", "85 - BTG Pactual CTVM S.A.", "122 - BGC LIQUIDEZ DTVM",
"122 - BGC LIQUIDEZ DTVM", "3 - XP Investimentos CCTVM S/A",
"77 - CITIGROUP GMB CCTVM S.A.", "386 - RICO INVESTIMENTOS - GRUPO XP",
"386 - RICO INVESTIMENTOS - GRUPO XP"), Type = structure(c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 4L, 1L, 4L, 4L, 4L, 1L,
4L, 4L, 4L), .Label = c("Buyer", "3", "4", "Seller"), class = "factor")), row.names = c(NA,
20L), class = "data.frame")





Это избавит вас от столбца продавца_от, но агрегирует его в соответствии с вашими спецификациями:
library(dplyr)
df %>% group_by(date_time, Price, Buyer_from, Type) %>% summarize(Quantity = sum(Quantity))
или в data.table
library(data.table)
setDT(df)
df[,.(Quantity = sum(Quantity)),by=.(date_time,Price,Buyer_from,Type)]
С помощью Dplyr мне удалось убрать вашего продавца из колонки!
library(dplyr)
#identify what is repeated
df = df %>% group_by(date_time, Buyer_from, Price) %>% mutate(n = n())
#create 2 dataframes to distingiush what is repeated
once = filter(df, n==1)
dups = filter(df, n>1)
#collapse our duplicates
dups = dups %>% group_by(date_time,Buyer_from,Price,Type) %>% summarize(Quantity = sum(Quantity))
#add back our seller_from column
dups$Seller_from = NA
#remove unnecessary columns from nondups
once = select(once, date_time, Buyer_from, Price, Quantity, Seller_from, Type)
#bring everything back together
final = rbind(once,dups)
# Groups: date_time, Buyer_from, Price [14]
date_time Buyer_from Price Quantity Seller_from Type
<dttm> <chr> <dbl> <dbl> <chr> <fct>
1 2018-02-01 15:14:59 3 - XP Investimentos CCTVM S/A 3176. 5 3 - XP Investimentos CCTVM S/A Seller
2 2018-02-01 15:14:55 85 - BTG Pactual CTVM S.A. 3177 5 88 - CM Capital Markets CCTVM LTDA Seller
3 2018-02-01 15:14:52 85 - BTG Pactual CTVM S.A. 3177 5 122 - BGC LIQUIDEZ DTVM Seller
4 2018-02-01 15:14:48 147 - ATIVA INVESTIMENTOS S.A. CTCV 3178. 70 92 - RENASCENÇA DTVM LTDA Seller
5 2018-02-01 15:14:44 147 - ATIVA INVESTIMENTOS S.A. CTCV 3178. 30 85 - BTG Pactual CTVM S.A. Buyer
6 2018-02-01 15:14:41 115 - H.COMMCOR DTVM LTDA 3178. 10 85 - BTG Pactual CTVM S.A. Seller
7 2018-02-01 15:14:34 115 - H.COMMCOR DTVM LTDA 3178. 10 122 - BGC LIQUIDEZ DTVM Seller
8 2018-02-01 15:14:33 8 - UBS BRASIL CCTVM S/A 3178 5 122 - BGC LIQUIDEZ DTVM Seller
9 2018-02-01 15:14:31 3 - XP Investimentos CCTVM S/A 3178. 5 3 - XP Investimentos CCTVM S/A Buyer
10 2018-02-01 15:14:28 8 - UBS BRASIL CCTVM S/A 3178 10 77 - CITIGROUP GMB CCTVM S.A. Seller
11 2018-02-01 15:14:21 8 - UBS BRASIL CCTVM S/A 3178 5 386 - RICO INVESTIMENTOS - GRUPO XP Seller
12 2018-02-01 15:14:13 8 - UBS BRASIL CCTVM S/A 3178 10 386 - RICO INVESTIMENTOS - GRUPO XP Seller
13 2018-02-01 15:14:52 147 - ATIVA INVESTIMENTOS S.A. CTCV 3178. 45 NA Buyer
14 2018-02-01 15:14:52 147 - ATIVA INVESTIMENTOS S.A. CTCV 3178. 55 NA Seller
15 2018-02-01 15:14:59 127 - TULLETT PREBON 3176. 65 NA Seller
Я просто добавил, чтобы вы держали продавца подальше!
Вы знаете, как их объединить? возможно, вставьте значения, такие как значения «-» или «NA». Я действительно борюсь с этой манипуляцией данными