我有一个类似于以下内容的数据集(称为数据):
v1 v2
1 1
1 3
1 5
2 3
2 4
3 1
3 2
我想返回一个矢量v3:
所以,在这个例子中,v3应该返回
v3
1
3
15
3
12
1
2
我使用lag.v1< -c(NA,Data [1:nrow(Data)-1,1])滞后于列v1,以便与前一行进行比较。我认为类似于下面的内容应该有效,但是前一行中的v3值而不是当前行。
数据$ v3< -ifelse(1 *(Data $ v1 == lag.v1)== 1,Data $ v3 * Data $ v2,Data $ v2)
换句话说,我需要以某种方式访问前一行v3(滞后v3),因为我在上面的等式中形成了v3。
非常感谢帮助,谢谢!
答案 0 :(得分:1)
您可以将ave
与cumprod
一起使用,这会计算按v2
分组的列v1
的累积产品:
df$v3 <- with(df, ave(v2, v1, FUN=cumprod))
df
# v1 v2 v3
#1 1 1 1
#2 1 3 3
#3 1 5 15
#4 2 3 3
#5 2 4 12
#6 3 1 1
#7 3 2 2
使用plyr
包,您可以将ddply
与transform
一起使用:
plyr::ddply(df, "v1", transform, v3 = cumprod(v2))
# v1 v2 v3
#1 1 1 1
#2 1 3 3
#3 1 5 15
#4 2 3 3
#5 2 4 12
#6 3 1 1
#7 3 2 2
如果还没有,您可能还想了解dplyr
方法:
library(dplyr)
df %>% group_by(v1) %>% mutate(v3 = cumprod(v2))
#Source: local data frame [7 x 3]
#Groups: v1 [3]
# v1 v2 v3
# <int> <int> <dbl>
#1 1 1 1
#2 1 3 3
#3 1 5 15
#4 2 3 3
#5 2 4 12
#6 3 1 1
#7 3 2 2
答案 1 :(得分:0)
我们可以使用
android:selectedItemPosition="@={model.position}"
data.table