我在R中有一个大数据表:
library(data.table)
set.seed(1234)
n <- 1e+07*2
DT <- data.table(
ID=sample(1:200000, n, replace=TRUE),
Month=sample(1:12, n, replace=TRUE),
Category=sample(1:1000, n, replace=TRUE),
Qty=runif(n)*500,
key=c('ID', 'Month')
)
dim(DT)
Run Code Online (Sandbox Code Playgroud)
我想调整这个data.table,使Category成为一个列.不幸的是,由于组内的类别数量不恒定,我不能使用这个答案.
我有什么想法可以做到这一点?
/编辑:基于joran的评论和flodel的回答,我们正在重塑以下内容data.table:
agg <- DT[, list(Qty = sum(Qty)), by = c("ID", "Month", "Category")]
Run Code Online (Sandbox Code Playgroud)
这种重塑可以通过多种方式实现(到目前为止我已经得到了一些好的答案),但我真正想要的是能够很好地扩展到data.table数百万行和数百到数千种类别的东西.
我有一个数据框,其序列在'col1'中,值在'col2'中:
col1 col2
2 0.02
5 0.12
9 0.91
13 1.13
Run Code Online (Sandbox Code Playgroud)
我想用1到13的常规序列扩展'col1'中的不规则序列.对于原始数据中缺少的'col1'中的值,我希望'col2' 0在最终输出中得到值:
col1 col2
1 0
2 0.02
3 0
4 0
5 0.12
6 0
7 0
8 0
9 0.91
10 0
11 0
12 0
13 1.13
Run Code Online (Sandbox Code Playgroud)
我怎么能在R中这样做?
我的问题在某种程度上与在data.frame中为缺失值添加行的最快方法有关?但我觉得有点困难.我无法弄清楚如何使这个解决方案适应我的问题.
这是我的data.table看起来像:
ida idb value date
1: A 2 26600 2004-12-31
2: A 3 19600 2005-03-31
3: B 3 18200 2005-06-30
4: B 4 1230 2005-09-30
5: C 2 8700 2005-12-31
Run Code Online (Sandbox Code Playgroud)
不同之处在于每个'ida'都有自己的日期,并且至少有一行"ida"出现在每个日期,但不一定是所有'idb'.我想插入缺少相应日期的每个缺失('ida','idb')对,并将0作为值.
而且,日期没有周期性.
你会怎么做?
期望的输出:
ida idb value date
1: A 2 26600 2004-12-31
1: A 2 0 2005-03-31
2: A 3 19600 2005-03-31
2: A 3 0 2004-12-31
3: B 3 18200 2005-06-30
4: B 3 0 2005-09-30
5: B 4 1230 2005-09-30
4: B …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据集:
shop_id,item_id,time,value
150,1,2015-07-10,3
150,1,2015-07-11,5
150,1,2015-07-13,2
150,2,2015-07-10,15
150,2,2015-07-12,12
Run Code Online (Sandbox Code Playgroud)
在每个组中,由"shop_id和"item_id"定义,缺少日期.
我希望将这个不规则的时间序列扩展到每个组中的常规连续日期:
shop_id,item_id,time,value
150,1,2015-07-10,3
150,1,2015-07-11,5
150,1,2015-07-12,0 # <~~ added
150,1,2015-07-13,2
150,2,2015-07-10,15
150,2,2015-07-11,0 # <~~ added
150,2,2015-07-12,12
Run Code Online (Sandbox Code Playgroud)
对于添加的日期,相应的值应为零.我读过非常相似的问题(使用R或SQL合并),但我见过的大多数解决方案都不涉及GROUP BY.
基本上我可以访问SQL数据库/我可以导出为CSV,最好在C#中进行操作.希望找到可以进行此类数据操作但无法找到的C#库.
任何建议或帮助表示赞赏!
我有一个R数据处理问题.我在.csv文件中有大量数据,我可以使用它加载readr.问题是我需要添加到数据帧的缺失值.
示例数据:
X1 X2 Value
Coal 1 300
Coal 3 100
Coal 5 150
NatG 2 175
NatG 4 150
Run Code Online (Sandbox Code Playgroud)
此文件将正确加载.但是,我想添加处理,以便最终的数据帧包含每个X1类型的条目和X2中的整个序列1:5,缺失值设置为零.最终的数据框如下:
X1 X2 Value
Coal 1 300
Coal 2 0
Coal 3 100
Coal 4 0
Coal 5 150
NatG 1 0
NatG 2 175
NatG 3 0
NatG 4 150
NatG 5 0
Run Code Online (Sandbox Code Playgroud)
我尝试使用readr加载所有条目等于零的文件,然后将实际数据读入相同的数据框,但这是一个破坏性的覆盖,并删除了丢失的行.我需要知道如何在数据帧中添加适当的行,而不知道X1下每个值的1:5序列中将丢失哪些值.
我正在寻找一种方法来按每组的时间填充时间序列数据集。我使用的非常低效的方法是对split每个组的数据集,并在该列表的所有元素中应用自定义时间序列填充函数(在最大值和最小值之间创建序列,然后合并)。不用说,这个操作不会通过分裂。
我的数据集看起来像,
Run Code Online (Sandbox Code Playgroud)source grp cnt 1: 83 2017-06-06 13:00:00 1 2: 83 2017-06-06 23:00:00 1 3: 83 2017-06-07 03:00:00 1 4: 83 2017-06-07 07:00:00 2 5: 83 2017-06-07 13:00:00 1 6: 83 2017-06-07 19:00:00 1 7: 83 2017-06-08 00:00:00 1 8: 83 2017-06-08 14:00:00 1 9: 83 2017-06-08 15:00:00 1 10: 83 2017-06-08 20:00:00 1 11: 137 2017-06-04 02:00:00 1 12: 137 2017-06-04 05:00:00 1 13: 137 2017-06-04 23:00:00 1 ...
我的尝试是tidyverse通过利用该函数来使用方法complete,即
library(tidyverse)
d1 …Run Code Online (Sandbox Code Playgroud) 考虑像这样的零散数据集:
ID Date Value
1 1 2012-01-01 5065
4 1 2012-01-04 1508
5 1 2012-01-05 9489
6 1 2012-01-06 7613
7 2 2012-01-07 6896
8 2 2012-01-08 2643
11 3 2012-01-02 7294
12 3 2012-01-03 8726
13 3 2012-01-04 6262
14 3 2012-01-05 2999
15 3 2012-01-06 10000
16 3 2012-01-07 1405
18 3 2012-01-09 8372
Run Code Online (Sandbox Code Playgroud)
请注意,缺少(2,3,9,10,17)的观察值。我想要的是用“ Value” = 0填充数据集中的某些空白,如下所示:
ID Date Value
1 1 2012-01-01 5920
2 1 2012-01-02 0
3 1 2012-01-03 0
4 1 2012-01-04 8377
5 …Run Code Online (Sandbox Code Playgroud)