r - 从 dplyr 管道中的当前观察中减去特定数字

标签 r dataframe transform dplyr

在将函数应用于 dplyr 管道中的数据之前,我想从任何给定的当前观察中减去我的选择。

例如,让我们计算平均值 a) 基于实际观察值和 b) 从当前观察值中减去 0.10 时的平均值。该解决方案应该适用于其他计算或功能。

比方说,我们查看三个不同天(day)的三种不同冰(ice_id = ice identifier)的冰价。

da <- data.frame(ice_id = c(1,1,1,2,2,2,3,3,3), day = c(1,2,3,1,2,3,1,2,3), price = c(1.60,1.90,1.80,2.10,2.05,2.30,0.50,0.40,0.35))

da
  ice_id day price
1      1   1  1.60
2      1   2  1.90
3      1   3  1.80
4      2   1  2.10
5      2   2  2.05
6      2   3  2.30
7      3   1  0.50
8      3   2  0.40
9      3   3  0.35

现在我想添加两列:
1) 根据三块冰的实际观测得出的当天平均冰价。
2) 如果仅当前行中的冰价格低 0.10(= 从当前价格观察值中减去 0.10),则为当天的平均冰价。

1) 对我来说很清楚,但我如何添加 2)?
da = da %>%
  group_by(day) %>%
  mutate(mean_dayprice = mean(price),
         mean_dayprice_lower = ?)

例如,在第一行 mean_dayprice_lower将由:
((1.60-.10)+2.10+.50)/3 = 1.36666

最佳答案

对于您的特定问题,您可以简单地计算 mean(price - 0.1) .

但是,通常您可以使用以下方法。
由于您所需的操作在类次中未进行向量化(即 -0.10)
你可以用 purrr::mapmutate :

da %>%
  group_by(day) %>%
  mutate(mean_dayprice = mean(price),
         mean_dayprice_lower = purrr::map_dbl(1:n(), ~mean(price - if_else(1:n() == .x, 0.1, 0))))

关于r - 从 dplyr 管道中的当前观察中减去特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62244756/

相关文章:

Python Pandas 根据动态数量的列创建列

r - 如何突出显示情节上的时间范围?

r - 使用 R 从网站提取澳大利亚纬度/经度点的高程

r - 从 DateTime 向量中获取小时

python-2.7 - 用另一个数据框的列填充 pandas 中的数据框列

iphone - 在不撤消旋转变换的情况下无法撤消缩放变换

r - 处理 R 中带有变音符号的字符数

python - 在 DataFrame 中堆叠两列,重复其他列

transform - 如何仅更改平行 View 中变换对象的表面外观?

animation - CSS3 连续旋转动画(就像加载日晷一样)