我正在学习R而且我不确定在dplyr或data.table上标准化是否有意义.Dplyr语法非常好,但据我所知,它会在每个操作上复制数据帧,这是(或可能是)一个缺点.
我无法弄清楚的一件事是mutate的替代方案.
如果我有
df %>% group_by(foo) %>% mutate(
bar = cumsum(baz),
q = bar * 3.14)
Run Code Online (Sandbox Code Playgroud)
我可以做某事
df[,c("bar"):=list(cumsum(baz)),by=foo]
df$q <- df$bar*3.14
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法在data.table中执行此操作?
我有一个包含一些计算列的数据表
dt <- data.table(x=c(1,4,-3,-2,3,4))
dt[,y:=cumsum(x)]
dt[,q:=cumsum(ifelse(x>0,x,0))]
x y q
1: 1 1 1
2: 4 5 5
3: -3 2 5
4: -2 0 5
5: 3 3 8
6: 4 7 12
Run Code Online (Sandbox Code Playgroud)
我需要做的是在y == 0之后重置q.本质上,行1:4属于A组,5:6属于B组.结果应为:
x y q
1: 1 1 1
2: 4 5 5
3: -3 2 5
4: -2 0 5
5: 3 3 3
6: 4 7 7
Run Code Online (Sandbox Code Playgroud)
我想我可以引入另一个具有值A,B,......的列组,它们会在y == 0之后发生变化,然后通过exssion使用它,但我不知道如何(至少不是使用for子句)