Я пытаюсь запустить функцию lapply
, используя входные данные из фрейма данных (пример ниже).
Ниже приведен пример файла csv, который я назвал holdings.csv
:
ticker,buy_date,shares_hold,buy_price,sell_date
"AAPL","2019-11-25",0.07,264.5714,
"MSFT","2019-11-29",0.195,151.85,
"MSFT","2020-04-08",0.6,165.17,
"DIS","2020-01-16",0.15,144.6,
"AMZN","2020-04-08",0.048,2017.5,
"BRK-B","2020-04-09",0.75,195.28,
Затем я импортировал эти данные во фрейм данных с помощью:
lots <- read_csv("holdings.csv")
> lots
# A tibble: 6 x 5
ticker buy_date shares_hold buy_price sell_date
<chr> <date> <dbl> <dbl> <lgl>
1 AAPL 2019-11-25 0.07 265. NA
2 MSFT 2019-11-29 0.195 152. NA
3 MSFT 2020-04-08 0.6 165. NA
4 DIS 2020-01-16 0.15 145. NA
5 AMZN 2020-04-08 0.048 2018. NA
6 BRK-B 2020-04-09 0.75 195. NA
Затем я запускаю следующий код, используя функцию tq_get
из пакета tidyquant
:
prices <- lapply(lots$ticker, FUN = tq_get,
from = lots$buy_date,
get = "stock.prices",
to = today())
Функция lapply
правильно получает и использует первый аргумент ( ticker vector) (построчно в определенном столбце фрейма данных), но принимает второй аргумент ( buy_date вектор) в качестве значения c (не ряд за строкой).
По сути, я хочу получить цены акций разных компаний (первый аргумент), используя другую дату начала (второй аргумент) , но он ищет цены на акции для всех разных компаний, но с одной и той же даты.
Здесь под выводом, где есть 6 списков (аналогично списку входных данных), но каждый список имеет одинаковое количество строк (потому что все были получены десять с той же даты начала).
> prices
[[1]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AAPL 2019-11-25 263. 266. 263. 266. 21005100 266.
2 AAPL 2019-11-26 267. 267. 262. 264. 26301900 264.
3 AAPL 2019-11-27 266. 268. 265. 268. 16308900 267.
4 AAPL 2019-11-29 267. 268 266. 267. 11654400 267.
5 AAPL 2019-12-02 267. 268. 263. 264. 23621800 264.
6 AAPL 2019-12-03 258. 260. 256. 259. 28607600 259.
7 AAPL 2019-12-04 261. 263. 261. 262. 16795400 261.
8 AAPL 2019-12-05 264. 266. 263. 266. 18606100 265.
9 AAPL 2019-12-06 267. 271 267. 271. 26518900 270.
10 AAPL 2019-12-09 270 271. 265. 267. 32010600 266.
# ... with 84 more rows
[[2]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 MSFT 2019-11-25 150 151. 150. 151. 22420900 151.
2 MSFT 2019-11-26 151. 152. 151. 152. 24620100 152.
3 MSFT 2019-11-27 152. 152. 152. 152. 15184400 152.
4 MSFT 2019-11-29 152. 152. 151. 151. 11977300 151.
5 MSFT 2019-12-02 152. 152. 148. 150. 27418400 149.
6 MSFT 2019-12-03 147. 149. 147. 149. 24066000 149.
7 MSFT 2019-12-04 150. 150. 149. 150. 17574700 149.
8 MSFT 2019-12-05 150. 150. 149. 150. 17869100 150.
9 MSFT 2019-12-06 151. 152. 150. 152. 16403500 151.
10 MSFT 2019-12-09 151. 152. 151. 151. 16687400 151.
# ... with 84 more rows
[[3]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 MSFT 2019-11-25 150 151. 150. 151. 22420900 151.
2 MSFT 2019-11-26 151. 152. 151. 152. 24620100 152.
3 MSFT 2019-11-27 152. 152. 152. 152. 15184400 152.
4 MSFT 2019-11-29 152. 152. 151. 151. 11977300 151.
5 MSFT 2019-12-02 152. 152. 148. 150. 27418400 149.
6 MSFT 2019-12-03 147. 149. 147. 149. 24066000 149.
7 MSFT 2019-12-04 150. 150. 149. 150. 17574700 149.
8 MSFT 2019-12-05 150. 150. 149. 150. 17869100 150.
9 MSFT 2019-12-06 151. 152. 150. 152. 16403500 151.
10 MSFT 2019-12-09 151. 152. 151. 151. 16687400 151.
# ... with 84 more rows
[[4]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 DIS 2019-11-25 149. 150. 148. 150. 11316800 149.
2 DIS 2019-11-26 152. 153. 151. 152. 24949900 151.
3 DIS 2019-11-27 152. 153. 151. 151. 6155400 151.
4 DIS 2019-11-29 151. 152. 151. 152. 6284900 151.
5 DIS 2019-12-02 153. 153. 149. 151. 10351000 150.
6 DIS 2019-12-03 148. 149. 147. 149. 9273800 148.
7 DIS 2019-12-04 149. 149. 148. 148. 7684800 147.
8 DIS 2019-12-05 149. 149. 147. 147. 7363300 147.
9 DIS 2019-12-06 148. 149. 147. 148. 7084900 147.
10 DIS 2019-12-09 148. 149. 145. 146. 11515000 145.
# ... with 84 more rows
[[5]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AMZN 2019-11-25 1753. 1777. 1753. 1774. 3486200 1774.
2 AMZN 2019-11-26 1780. 1797. 1778. 1797. 3181200 1797.
3 AMZN 2019-11-27 1801 1824. 1797. 1819. 3025600 1819.
4 AMZN 2019-11-29 1818. 1825. 1801. 1801. 1923400 1801.
5 AMZN 2019-12-02 1804. 1806. 1763. 1782. 3925600 1782.
6 AMZN 2019-12-03 1760 1773. 1747. 1770. 3380900 1770.
7 AMZN 2019-12-04 1774. 1789. 1760. 1761. 2670100 1761.
8 AMZN 2019-12-05 1764. 1764. 1740 1740. 2823800 1740.
9 AMZN 2019-12-06 1751. 1754. 1740. 1752. 3117400 1752.
10 AMZN 2019-12-09 1751. 1767. 1746. 1750. 2442800 1750.
# ... with 84 more rows
[[6]]
# A tibble: 94 x 8
symbol date open high low close volume adjusted
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 BRK-B 2019-11-25 219. 219. 218. 219. 3648500 219.
2 BRK-B 2019-11-26 219. 219. 218. 219. 3717800 219.
3 BRK-B 2019-11-27 219. 221. 218. 220. 3945500 220.
4 BRK-B 2019-11-29 220. 221. 220. 220. 2256500 220.
5 BRK-B 2019-12-02 221. 221. 220. 220. 3888100 220.
6 BRK-B 2019-12-03 219. 219. 216. 218. 4480100 218.
7 BRK-B 2019-12-04 218. 219. 218. 218. 2667700 218.
8 BRK-B 2019-12-05 219. 220. 218. 220. 2319300 220.
9 BRK-B 2019-12-06 222. 223 221. 223. 3447700 223.
10 BRK-B 2019-12-09 223. 223. 221. 221. 2601000 221.
# ... with 84 more rows
Я пробовал mapply
, но это не дает мне результат, который мне нужен.
prices <- mapply(lots$ticker, FUN = tq_get,
from = lots$buy_date,
get = "stock.prices",
to = today())
> prices
AAPL MSFT MSFT DIS AMZN BRK-B
symbol Character,94 Character,91 Character,2 Character,59 Character,2 Character,2
date Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
open Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
high Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
low Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
close Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
volume Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2
adjusted Numeric,94 Numeric,91 Numeric,2 Numeric,59 Numeric,2 Numeric,2