如何根据R中数据框中其他列的顺序创建列?

时间:2015-08-06 17:19:49

标签: r dplyr

假设我们有以下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)])
}

提前致谢。

2 个答案:

答案 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();