Условное подмножество для доступа к значениям в кадре данных (точечный график FED / FOMC Лен Кифер) - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь сделать точечный график процентных ставок FOMC / FED.

Я копирую http://lenkiefer.com/2016/06/22/make-a-dotplot/, но безуспешно

Это дает мне Ошибкав check_names_df (i, x): объект 'x' не найден

Я изо всех сил пытаюсь понять части цикла for.В частности, значения, которые мы хотим, чтобы длина была.Интересно, может кто-нибудь объяснить это или дать мне другие более простые альтернативы:

for (i in 1:length(d6[x==xlist[xx]]$rate) ) and 

for (j in 1:d6[x==xlist[xx] ]$count[i]) and

if (d6[x==xlist[xx]]$count[i]>0)

Вот полный код:

library(ggplot2) 

library(scales)

library(readxl)

library(tidyverse)

library(data.table) 

d6<-read_excel("jun2018.xlsx", sheet = "June2018") 

d6<-d6 %>% gather(x, count, 2:5)

После того, как данные приведены в таблицу, в ней есть три столбца.Один соответствует скорости (скорость), один соответствует горизонту (х), а другой соответствует количеству точек (количество).В качестве примера это выглядит так:

 rate        x           count
1.750      2018           1
2.000      2018           2
2.125      2018           6 
2.375      2018           5
2.625      2018           NA
1.750      2019           1
2.000      2019           2
2.125      2019           5 
2.375      2019           6
2.625      2019           NA
1.750      2020           1
2.000      2020           4
2.125      2020           2 
2.375      202O           7
2.625      2020           NA
1.750      Longer Run     1
2.000      Longer Run     4
2.125      Longer Run     2 
2.375      Longer Run     7
2.625      Longer Run     NA

xlist<-unique(d6$x) #get a unique list of horizon values appearing in the FOMC projection table (2018,2019,2020,Longer Run)

df<-data.frame(rate=numeric(),x=numeric()) 

for (xx in 1:length(xlist)) {  #loop through unique x values (2018,   2019, 2020 and Longer Run)
for (i in 1:length(d6[x==xlist[xx]]$rate) ){  #create a dot for each observation
for (j in 1:d6[x==xlist[xx] ]$count[i]) {   #count along each row
  if (d6[x==xlist[xx]]$count[i]>0) {   #do something if count is greater than 0
  myc<-j   #set up a counter for total number of dots in a row (j corresponds to the number of dots in a row) 
  #if number in row is odd start at zero 
  #if number in row is even start at 1⁄2 0.4 = 0.2 around zero
  df1<- data.frame(rate=d6[x==xlist[xx]]$rate[i],x=ifelse(d6[x==xlist[xx]]$count[i] %% 2 ==1, ifelse(myc %% 2 ==1,xx+(-1)^myc * (myc-1)*0.04,xx+(-1)^myc * (myc)*0.04), xx-.02+(-1)^myc * (myc)*0.04) ) 
  df<-rbind(df,df1)   }}}} 

Спасибо

...