假设我们有以下df:
df
V1 V2
1 .50
2 .30
3 .27
4 .59
5 .34
6 .23
7 .56
8 .78
9 .23
现在我想创建一个列V3,使其对应于前值的平均值。
简而言之,V3 [3] =。40,例如,(V2 [1] + V2 [2] / 2)=(。5 + .3)/ 2.
如何使用dplyr或plain R进行该操作?如何使用data.frame中的订单执行操作?
我在问一些变异功能。
我在普通的R中尝试了这个代码,但它看起来效率不高:
df$V3 <- NA
for (i in 1:nrow(df)) {
df$V3[i] <- mean(df$V2[1:(i-1)])
}
提前致谢。
答案 0 :(得分:1)
dplyr
的解决方案:
library(dplyr)
df %>% mutate(V3 = lag(cummean(V2)))
V1 V2 V3
1 1 0.50 NA
2 2 0.30 0.5000000
3 3 0.27 0.4000000
4 4 0.59 0.3566667
5 5 0.34 0.4150000
6 6 0.23 0.4000000
7 7 0.56 0.3716667
8 8 0.78 0.3985714
9 9 0.23 0.4462500
答案 1 :(得分:0)
这有效吗?:
var book = new ExcelQueryFactory(pathFile);
var result = (from row in book.Worksheet("Sheet1")
let item = new packages
{
from = row["From"].Cast<string>(),
to = row["to"].Cast<string>(),
items = new List<packages.items>()
{
new items()
{
items = row["items"].Cast<string>()
}
}
}
select item).ToList();