【发布时间】:2016-03-31 16:39:08
【问题描述】:
我有一个不同时间段内不同文章的销售列表,格式如下:
col <- c("A", "B", "C")
A <- c(1,0,0)
B <- c(0,1,0)
C <- c(0,0,1)
colnames(df) <- c('article','w1', 'w2', 'w3')
df
article w1 w2 w3
A 1 0 0
B 0 1 0
C 0 0 1
我需要创建一个新列来计算行的平均值,但仅在行中第一次出现正数之后才开始。这意味着如果一行看起来像:
A 0 1 0
算法必须只考虑最后两个值(1 和 0)并将值 (1+0)/2 = 0.5 放入新列。最终结果必须如下所示:
article w1 w2 w3 Mean
A 1 0 0 0.33
B 0 1 0 0.5
C 0 0 1 1
谁能告诉我怎么弄好?
非常感谢
【问题讨论】:
-
总是二进制数据集吗?此外,如果这些只是数字,最好采用矩阵格式。
-
如果你确实只有 0/1,你可以使用行总和和每行前 1 的索引;
m = as.matrix(df[-1L]); rowSums(m) / (ncol(m) - max.col(m, "first") + 1L)