R:如何使用if或for获得循环?

问题描述 投票:1回答:1

我正在处理以下数据:

year month   day fivemin rrp_nsw rrp_qld rrp_sa rrp_tas rrp_vic
2009     7     1       1    16.9    17.6   16.7    15.7    15.5
2009     7     1       2    17.7    18.8   17.8    16.1    15.5
2009     7     1       3    17.7    18.6   18.1    15.9    15.4
2009     7     1       4    16.7    18.6   17.6    14.3    12.8
2009     7     1       5    15.6    17.6   16.3    13.2    11.8
2009     7     2       1    13.7    15.7   12.0    11.1    12.9
2009     7     2       2    13.7    15.8   11.9    11.1    12.9
2009     7     2       3    13.9    16.1   12.1    11.2    12.9
2009     7     2       4    13.8    16.0   12.2    11.2    12.8
2009     7     2      5    13.7    16.3   11.6    10.6    12.6
2009     7     3      1    13.7    15.8   11.9    11.0    12.7
2009     7     3      2    13.8    16.0   12.1    11.2    12.9
2009     7     3      3    17.6    17.6   17.3    16.5    17.1
2009     7     3      4    17.7    17.6   17.3    16.8    17.4
2009     7     3      5    15.8    16.0   15.1    15.0    15.5

这个想法是计算rrp_nsw,rrp_qld,rrp_sa,rrp_tas和rrp_vic的变化并将它们平方。我正在使用以下行

(Base[-1,5:9] - Base[-nrow(Base),5:9])^2

但是,每次可变日期更改时,我都需要应用此行。我想构造以下矩阵:

year month   day fivemin rrp_nsw rrp_qld rrp_sa rrp_tas rrp_vic  V1   V2   V3   V4   V5   
2009     7     1       1    16.9    17.6   16.7    15.7    15.5   NA   NA   NA   NA   NA
2009     7     1       2    17.7    18.8   17.8    16.1    15.5   0.59    1.35   1.19    0.15    0.00
2009     7     1       3    17.7    18.6   18.1    15.9    15.4   0.00    0.04   0.09    0.02    0.01
2009     7     1       4    16.7    18.6   17.6    14.3    12.8   0.89    0.00   0.25    2.65    6.64
2009     7     1       5    15.6    17.6   16.3    13.2    11.8   1.20    0.92   1.66    1.06    1.03
2009     7     2       1    13.7    15.7   12.0    11.1    12.9   NA   NA   NA   NA   NA
2009     7     2       2    13.7    15.8   11.9    11.1    12.9   0.00    0.01   0.00    0.00    0.00
2009     7     2       3    13.9    16.1   12.1    11.2    12.9   0.02    0.08   0.03    0.00    0.00
2009     7     2       4    13.8    16.0   12.2    11.2    12.8   0.00    0.01   0.02    0.00    0.01
2009     7     2      5    13.7    16.3   11.6    10.6    12.6   0.03    0.11   0.39    0.35    0.07
2009     7     3      1    13.7    15.8   11.9    11.0    12.7   NA   NA   NA   NA   NA
2009     7     3      2    13.8    16.0   12.1    11.2    12.9   0.02    0.02   0.04    0.03    0.03
2009     7     3      3    17.6    17.6   17.3    16.5    17.1   14.06    2.86  27.70   29.04   17.53
2009     7     3      4    17.7    17.6   17.3    16.8    17.4    0.02    0.00   0.00    0.08    0.09
2009     7     3      5    15.8    16.0   15.1    15.0    15.5   3.77    2.88   4.82    3.31    3.52

如果有人可以解释如何申请,或者如果可以,我将不胜感激。

r loops matrix algebra
1个回答
1
投票

这里是dplyr方法:

library(dplyr)
Base %>%
  arrange(year, month, day, fivemin) %>%
  group_by(year, month, day) %>%
  mutate_at(vars(rrp_nsw, rrp_qld, rrp_sa, rrp_tas, rrp_vic), list(d = ~ c(NA, diff(.)^2))) %>%
  ungroup()
# # A tibble: 15 x 14
#     year month   day fivemin rrp_nsw rrp_qld rrp_sa rrp_tas rrp_vic rrp_nsw_d rrp_qld_d rrp_sa_d rrp_tas_d rrp_vic_d
#    <int> <int> <int>   <int>   <dbl>   <dbl>  <dbl>   <dbl>   <dbl>     <dbl>     <dbl>    <dbl>     <dbl>     <dbl>
#  1  2009     7     1       1    16.9    17.6   16.7    15.7    15.5  NA         NA      NA        NA        NA      
#  2  2009     7     1       2    17.7    18.8   17.8    16.1    15.5   0.64       1.44    1.21      0.16      0      
#  3  2009     7     1       3    17.7    18.6   18.1    15.9    15.4   0          0.0400  0.09      0.04      0.01000
#  4  2009     7     1       4    16.7    18.6   17.6    14.3    12.8   1          0       0.25      2.56      6.76   
#  5  2009     7     1       5    15.6    17.6   16.3    13.2    11.8   1.21       1       1.69      1.21      1      
#  6  2009     7     2       1    13.7    15.7   12      11.1    12.9  NA         NA      NA        NA        NA      
#  7  2009     7     2       2    13.7    15.8   11.9    11.1    12.9   0          0.01    0.01000   0         0      
#  8  2009     7     2       3    13.9    16.1   12.1    11.2    12.9   0.04       0.09    0.0400    0.01000   0      
#  9  2009     7     2       4    13.8    16     12.2    11.2    12.8   0.01000    0.01    0.01000   0         0.01000
# 10  2009     7     2       5    13.7    16.3   11.6    10.6    12.6   0.01       0.09    0.360     0.360     0.04   
# 11  2009     7     3       1    13.7    15.8   11.9    11      12.7  NA         NA      NA        NA        NA      
# 12  2009     7     3       2    13.8    16     12.1    11.2    12.9   0.01       0.0400  0.0400    0.0400    0.04   
# 13  2009     7     3       3    17.6    17.6   17.3    16.5    17.1  14.4        2.56   27.0      28.1      17.6    
# 14  2009     7     3       4    17.7    17.6   17.3    16.8    17.4   0.01000    0       0         0.09      0.0900 
# 15  2009     7     3       5    15.8    16     15.1    15      15.5   3.61       2.56    4.84      3.24      3.61   

((数字与您的数字略有不同,也许我误解了,或者您的问题只是一个带有占位符的演示。)

© www.soinside.com 2019 - 2024. All rights reserved.