如何针对 R 中数据框中的不同日期对数据进行不同的标准化?

How do I standardize data differently for different dates in my dataframe in R?

首先 - 感谢您花时间 view/answer 我的问题。我会尽力解释这个问题(希望不会太难,我绝不是R专家)

假设我有以下数据(第一列是日期,第二列是 "levels",级别是每天从 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 的第 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 个是 "CHANGE"... 我就是听不懂:/ )

     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 中做到这一点 [是的,我是相对较新的]..

非常感谢!

试试这个:

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 类别。 Google 术语并熟悉 R 为您提供的选项(例如 base, dplyr, data.table)。以后会派上用场的。