如何用R中的一个数字除一列?

omhiaaxx  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(141)

不久前我发布了一个类似的question,并得到了一个适用于xts的回复:

standardize<-function(ts) { as.xts(apply(ts, 2, function(x) x / x[1])) }

现在我有一个tsibble,它失败了,并显示:

Error in x/x[1] : non-numeric argument to binary operator

require(fpp3)
goog<-gafa_stock|>filter(Symbol=="GOOG",year(Date)==2018)
    close<-goog|>select(Close)
    close1 <- apply(close, 2, function(x) x / x[1])
fcg9iug3

fcg9iug31#

我们可以这样做。apply需要一个数组,包括矩阵。我们可以将mutategroup_by()一起使用,并使用Close = Close / first(Close)

require(fpp3)

gafa_stock %>% 
  filter(Symbol=="GOOG", year(Date)==2018) %>% 
  #group_by(Symbol) %>% 
  mutate(Close = Close / first(Close))
# A tsibble: 251 x 8 [!]
# Key:       Symbol [1]
# Groups:    Symbol [1]
   Symbol Date        Open  High   Low Close Adj_Close  Volume
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>   <dbl>
 1 GOOG   2018-01-02 1048. 1067. 1045.  1        1065  1237600
 2 GOOG   2018-01-03 1064. 1086. 1063.  1.02     1082. 1430200
 3 GOOG   2018-01-04 1088  1094. 1084.  1.02     1086. 1004600
 4 GOOG   2018-01-05 1094  1104. 1092   1.03     1102. 1279100
 5 GOOG   2018-01-08 1102. 1111. 1102.  1.04     1107. 1047600
 6 GOOG   2018-01-09 1109. 1111. 1101.  1.04     1106.  902500
 7 GOOG   2018-01-10 1097. 1105. 1096.  1.04     1103. 1042800
 8 GOOG   2018-01-11 1106. 1107. 1100.  1.04     1106.  978300
 9 GOOG   2018-01-12 1102. 1124. 1101.  1.05     1122. 1720500
10 GOOG   2018-01-16 1133. 1140. 1118.  1.05     1122. 1575300
# … with 241 more rows

相关问题