我希望在一个基于行值在现有行的一定范围内的嵌套框架中改变一个新行。
类似于以下内容:
df <- data.frame(
"a" = c(1, 2, 3, 4, 5, 8, 9, 15, 22, 60),
"b" = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
)
df <- df %>%
mutate(c = mean(if(~a <= a, ~b)))
字符串
其中“~a”是指“a”值的整个列,并且“a”是指正在突变的特定行。
编辑:所以c的预期输出是:(2,[a小于第一个a的b值的平均值] 2.5 [a小于第二个a的b值的平均值],以此类推)。在实践中,我有多个“if”条件,所以它不仅仅是一个累积和/平均值。
我在网上找到了一些解决方案,其中if语句是特定的(例如,mutate if ~a < 5),但不是基于a的当前行值。
2条答案
按热度按时间b4lqfgs41#
由于
a
已经排序(至少你的例子是这样呈现的),你等价地计算b
的滚动平均值,样本数不同(取决于a
的位置)你可以像下面这样尝试
cummean
字符串
它应该给予
型
一般情况下(未排序
a
)例如,如果
a
未排序,则可以使用以下代码型
或更有效(感谢@Onyambu的评论)
型
它给出了相同的输出
型
对于未排序的示例,
我们可以实现
apeeds0o2#
您需要将
a
列降到最低,可以在mutate
中使用sapply
执行此操作字符串