对于我的每行数据,我想计算最近的和value
每个group
:
dt = data.table(group = c('a','b','a','a','b','a'),
value = c(10, 5, 20, 15, 15, 10),
desired = c(10, 15, 25, 20, 30, 25))
# group value desired
#1: a 10 10
#2: b 5 15
#3: a 20 25 # latest value of a is 20, of b is 5
#4: a 15 20 # latest value of a is 15, of b is 5
#5: b 15 30
#6: a 10 25
Run Code Online (Sandbox Code Playgroud)
desired
column是我想要实现的,我可以用一个简单的循环来完成这个,但是我的数据非常庞大,有很多行和组(1M +行,1000多个组).
for …
Run Code Online (Sandbox Code Playgroud) 我想看看人们用R来处理具有大型数据集(即50 mil + obs)的面板数据的方法:该data.table
软件包很有用,因为它有密钥并且非常快.该xts
软件包非常有用,因为它具有执行各种时间序列的功能.因此,似乎有两个不错的选择:
data.table
并编写自定义时间序列函数来处理它xts
对象列表,并lapply
在每次要执行某些操作时在该列表上运行.最终这需要合并为一个data.frame
回归等.我知道这个plm
包,但没有发现它对数据管理有用,就像上面的两个选项一样.你们用的是什么?什么时候最好的想法?
让我提出一个场景:假设有N个公司有T个时间段,其中N >> 0和T >> 0.data.table
如果我想让每个公司滞后一段时间,那将会超级快,例如:
x <- data.table(id=1:10, dte=rep(seq(from=as.Date("2012-01-01"), to=as.Date("2012-01-10"), by="day"), each=10), val=1:100, key=c("id", "dte"))
x[,lag_val:=c(NA, head(val, -1)),by=id]
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是:
y <- lapply(ids, function(i) {xts(x[id==i, val], order.by=x[id == i, dte])})
y <- lapply(y, function(obj) { cbind(obj, lag(obj, 1)) })
Run Code Online (Sandbox Code Playgroud)
前者的优势在于它具有大数据的速度.后者的优点是能够做类似的事情period.apply
并使用其他功能xts
.是否有提高xts
表示速度的技巧?也许是两者的结合?xts
看来,从对象转换到对象是昂贵的.
我的目标是通过向前滚动来按组填充缺失值。
虚拟数据
library(data.table)
DT <- structure(list(CLASS = c("A", "A", "A", "A", "A", "A", "B", "B","B"),
VAL = c(NA, 1, NA, NA, 2, NA, 50, NA, 100)),
.Names = c("CLASS", "VAL"),
row.names = c(NA, -9L), class = c("data.table", "data.frame"))
> DT
CLASS VAL
1: A NA
2: A 1
3: A NA
4: A NA
5: A 2
6: A NA
7: B 50
8: B NA
9: B 100
Run Code Online (Sandbox Code Playgroud)
想要的结果
CLASS VAL
1: A NA
2: A 1
3: A …
Run Code Online (Sandbox Code Playgroud) 我有一个大表:10M行乘33列,其中28列有一些NA值.这些NA值需要使用修补locf()
.我在这个主题上读了几个线程(在Rcpp中的单个R data.table和na.locf以及inverse.rle中按组有效地进行locf).但是,这些线程是关于替换数字向量.我不太熟悉Rcpp
所以我不知道如何更改他们的代码以满足字符串---我的数据都是字符串.
以下是我的示例数据:
输入数据
Sample_File = structure(list(SO = c(112, 112, 112, 112, 113, 113, 113, 113),
Product.ID = c("AB123", "CD234", "DE345", "EF456", "FG456",
"GH567", "HI678", "IJ789"), Name = c(NA, NA, NA, "Human Being",
NA, "Lion", NA, "Bird"), Family = c(NA, NA, NA, "Homo Sapiens",
NA, NA, NA, "Passeridae"), SL1_Continent = c("Asia", NA,
"Asia", "Asia", NA, NA, NA, "Australia"), SL2_Country = c("China",
"China", NA, NA, NA, NA, NA, "Australia"), SL3_Direction = …
Run Code Online (Sandbox Code Playgroud)