我在R中有一个data.table,我想按组分别应用滚动总和.但问题是组长度不一样,当rollapply函数到达较短的组时,它会遇到错误.有没有办法解决这个问题,除了循环?
以下是一个简单的例子来说明问题.
DT <- data.table(id = c(rep("A", 6), rep("B", 2), rep("C", 8)),
val = c(1:6, 1:2, 1:8))
> DT
id val
1: A 1
2: A 2
3: A 3
4: A 4
5: A 5
6: A 6
7: B 1
8: B 2
9: B 1
10: B 2
11: B 3
12: B 4
13: B 5
14: B 6
15: C 7
16: C 8
Run Code Online (Sandbox Code Playgroud)
滚动总和4个数字,使用 rollapplyr()
DT[, cum.sum := rollapplyr(val, width = 4, FUN = …Run Code Online (Sandbox Code Playgroud) 我有一个data.table和一个公式列表,
DT <- data.table(A = c(1:3), B = c(3:1), C = c(4:6), D = (6:4))
l <- list(f1 = "A + B", f2 = "B + C", f3 = "C - D", f4 = "D / A")
Run Code Online (Sandbox Code Playgroud)
这可以通过以下方式实现
DT[, ":="(f1 = A + B, f2 = B + C, f3 = C - D, f4 = D / A)]
Run Code Online (Sandbox Code Playgroud)
要么
for (i in 1:length(l)) {
DT[, eval(names(l)[i]) := eval(parse(text=l[[i]]))]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在l不使用循环的情况下使用信息?
# some code
DT
# A B …Run Code Online (Sandbox Code Playgroud) 我有一个data.table以下形式:
DT <- data.table(tag = rep(c("A", "B"), each = 10),
value = c(0, 3, 3, 3, 0, 1, 1, 1, 3, 0,
0, 1, 3, 1, 0, 3, 0, 1, 1, 0))
> DT
tag value
1: A 0
2: A 3
3: A 3
4: A 3
5: A 0
6: A 1
7: A 1
8: A 1
9: A 3
10: A 0
11: B 0
12: B 1
13: B 3
14: B 1 …Run Code Online (Sandbox Code Playgroud)