r - 计算 R 中每一天的对数差异 为每一天的第一次观察产生 NA
问题描述
问题:计算每天的对数差异(每天分组)。理想的结果应该为每天的第一次观察产生 NA。
library(dplyr)
library(tidyverse)
library(tibble)
library(lubridate)
df <- tibble(t = c("2019-10-01 09:30", "2019-10-01 09:35", "2019-10-01 09:40", "2019-10-02 09:30", "2019-10-02 09:35", "2019-10-02 09:40", "2019-10-03 09:30", "2019-10-03 09:35", "2019-10-03 09:40"), v = c(105.0061, 104.891, 104.8321, 104.5552, 104.4407, 104.5837, 104.5534, 103.6992, 103.5851)) # data
# my attempt
df %>%
# create day
mutate(day = day(t)) %>%
# group by day
group_by(day) %>%
# calculate log difference and append column
mutate(logdif = diff(log(df$v)))
问题是
Error: Column `logdif` must be length 3 (the group size) or one, not 8
我需要的:
[1] NA -0.0010967280 -0.0005616930 NA -0.0010957154
[6] 0.0013682615 NA -0.0082035450 -0.0011009036
解决方案
切勿$
在dplyr
管道中使用,您还需要附加NA
到diff
输出
library(dplyr)
df %>%
mutate(day = lubridate::day(t)) %>%
group_by(day) %>%
mutate(logdif = c(NA, diff(log(v))))
# t v day logdif
# <chr> <dbl> <int> <dbl>
#1 2019-10-01 09:30 105. 1 NA
#2 2019-10-01 09:35 105. 1 -0.00110
#3 2019-10-01 09:40 105. 1 -0.000562
#4 2019-10-02 09:30 105. 2 NA
#5 2019-10-02 09:35 104. 2 -0.00110
#6 2019-10-02 09:40 105. 2 0.00137
#7 2019-10-03 09:30 105. 3 NA
#8 2019-10-03 09:35 104. 3 -0.00820
#9 2019-10-03 09:40 104. 3 -0.00110
推荐阅读
- symfony - 如何处理单页 REST 应用程序的 silex 生命周期结束
- c# - 数据网格未使用新值更新 UI
- linux - Bash,在特定文件夹中显示进程
- fasttext - FastText 量化文档不正确?
- sharepoint - 推广 SharePoint 新闻
- javascript - 是否可以将 microsoft-graph 客户端密码放入源代码中?
- function - 在 ocaml 中使用 fun 关键字
- java - 是否可以配置 Eclipse 以突出显示 XML 中的 Java 语法?
- java - 在 Spring MVC 项目中设置默认受保护的欢迎页面
- c - 对数组中的负元素进行排序