1

首先,感谢您抽出宝贵时间查看/回答我的问题。我会尽力解释这个问题(希望不会太难,我绝不是 R 专家)

假设我有以下数据(第一列是日期,第二列是“级别”,级别是每天 2:8 的重复序列。Var 3 只是一些统计数据..)

      Date     level  var3
1  2/10/2017     2   0.2340
2  2/10/2017     3   0.1240
3  2/10/2017     4   0.5120
4  2/10/2017     5   0.4440
5  2/10/2017     6   0.1200
6  2/10/2017     7   0.5213
7  2/10/2017     8   0.1200
8  2/11/2017     2   0.4100
9  2/11/2017     3   0.6500
10 2/11/2017     4   0.2400
11 2/11/2017     5   0.5500
13 2/11/2017     6   0.3100
14 2/11/2017     7   0.1500
15 2/11/2017     8   0.2300
16 2/12/2017     2   0.1500
17 2/12/2017     3   0.5800
18 2/12/2017     4   0.3300
19 2/12/2017     5   0.2100
20 2/12/2017     6   0.9800
21 2/12/2017     7   0.3200
22 2/12/2017     8   0.1800

我的目标是通过执行以下操作来标准化数据:

- Create a new column called 'Change'
- For each unique date, Change is (log(var3) - log(var3[level == 5])

本质上,对于每个唯一的日期,我想逐行获取 Var3 数据,然后用 var3 FOR THAT DAY* 的 5 级值减去它的对数 [例如,change[1] = log(.2340) - log(.4440) .. change[2] = log(.1240) - log(.444)... 但是对于 change[10] 它将是 log(.2400) - log(.5500).. 和很快..

我在 R 中遇到了麻烦,下面是我想出的代码(但结果似乎是 21 行 x 24 变量......但我真的只想要 21 行和 4 列,第 4 列是“改变”......我就是无法理解:/)

     log_mean <- function(data_set) {
     for (i in unique(data_set$Date) {
     midpoint <- data_set$var3[data_set$level == 5]
     c <- (log(data_set$var3) - log(midpoint))
     change <- rbind(change,c)}}
     y <- cbind(x, change)

如果可以,请提供帮助,直觉上它似乎很容易做到,我不知道如何在 R 中做到这一点 [是的,我是相对较新的]..

非常感谢!

4

1 回答 1

1

试试这个:

library(dplyr)
df %>% group_by(Date) %>% mutate(change = log(var3) - log(var3[level==5]))
# A tibble: 21 x 4
# Groups:   Date [3]
   Date      level  var3 change
   <fct>     <int> <dbl>  <dbl>
 1 2/10/2017     2 0.234 -0.641
 2 2/10/2017     3 0.124 -1.28 
 3 2/10/2017     4 0.512  0.143
 4 2/10/2017     5 0.444  0    
 5 2/10/2017     6 0.12  -1.31 
 6 2/10/2017     7 0.521  0.161
 7 2/10/2017     8 0.12  -1.31 
 8 2/11/2017     2 0.41  -0.294
 9 2/11/2017     3 0.65   0.167
10 2/11/2017     4 0.24  -0.829
# ... with 11 more rows

一般来说,这属于 类别split-apply-combine。谷歌该术语并熟悉 R 为您提供的选项(例如base, dplyr, data.table)。将来会派上用场。

于 2018-08-04T16:13:20.107 回答