【问题标题】:Warning message: In id == i : longer object length is not a multiple of shorter object length警告消息:在 id == i 中:较长的对象长度不是较短对象长度的倍数
【发布时间】:2020-10-27 15:00:44
【问题描述】:

我正在尝试设置一个循环,它应该给我 6 个单独的时间序列图。但是,我只得到 1 个情节,这很奇怪。我在 id == i 中收到警告消息:较长的对象长度不是较短对象长度的倍数。有任何想法吗?谢谢

#Importing data
    df <- read_csv("01_tracks.csv")
    
    #Preparing data 
    df1 <- filter(df,laneId == 5, width <= 6) #Filtering to only lane 5 and no trucks
    
    for(i in head(unique(select(df1,id)))) {
      print(i)
      veh <- filter(df1,id == i)
      timeplot <- ts(veh[,7],start = 1)
      plot(autoplot(timeplot) + ggtitle(i) + ylab("X Velocity"))

}

【问题讨论】:

标签: r plot time-series


【解决方案1】:

数据框

names <- c(1,1,1,1,2,2,2,2,3,3,3,3)

data <- c(2,6,8,1,3,6,3,4,3,8,6,5)

frame <- data.frame(data, names)
使用 for 循环,您可以获得单独的图,将唯一 id 分配给 pdf 以获取单独的图。
for ( i in unique(frame$names)){
  pdf(i)
  plot (frame$data [frame$names == i], frame$names[frame$names == i])
  dev.off()
}

【讨论】:

    【解决方案2】:

    没有样本数据很难做到,但我认为你错误地认为i 在这里是一个整数。不过,我认为这是错误的。 head(unique(select(df1,id))) 生成的不是向量,而是单列数据框。一个数据框是一个向量列表,它被迭代了。所以,我认为只会有一次迭代。

    如果您使用pull(head(unique(select(df1,id)))),它可能会起作用。

    (实际上unique(df1$id)[1:6] 应该做同样的事情并且看起来更好。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多