【问题标题】:Plot Frequency from Categorical Data over Irregular Intervals in R绘制 R 中不规则区间上的分类数据的频率
【发布时间】:2014-12-23 10:55:54
【问题描述】:

我希望有人可以帮助我解决 R 中的以下问题,这似乎应该有一个简单的答案:

#create data frame
df<- data.frame(x = c(1,10,10,40,50,75,100,500,550,600), y = c("black", "black", "red", "black", "blue", "red", "red", "black", "black", "blue"))
 df
 x    y
 1  black
10  black
10  red
40  black
50  blue
75  red
100 red
500 black
550 black
600 blue
 #Where x = days from time 0, y = event

如何绘制一个时间序列,其中每个变量的频率定期(例如每 30 天)用连接线绘制到每个点(即不是hist())?例如。 for (x, y) 将 plot (0-30, black) = 2, (0-60, black) = 1, (60-90, black) = 0,对每个 y 变量以此类推。

我使用tally.events() (epicalc) 在不同的数据集上取得了成功,该数据集非常适合我想要使用时间数据但不适用于不是“日期”的值。其他数据集工作如下:

 positive.df 
   resultz    datefix
13       P 2009-02-20
25       P 2009-03-23
45       P 2009-04-27
75       P 2009-07-22
82       P 2009-08-06
94       P 2009-08-19
tally.events(positive.df$datefix, breaks = c("month"), graph = TRUE, line.col ="auto", legend = TRUE, legend.site = "topright")

【问题讨论】:

  • 出图频率:时间点0-30(天),黑色频率为2等
  • 这有意义吗? tapply(df$x, df$y, sum)tapply(df$x, df$y, cumsum)
  • 不完全。不想对 y 列求和,想计算每个 y 区间(0-30、31-60 等)的 x 变量并绘图。类似的东西:
  • x0to30
  • 这个怎么样? tapply(df$y, as.integer(df$x/30), length)

标签: r time-series


【解决方案1】:

试试这个:

sq <- seq(0, 600, 30)
x_cut <- cut(df$x, sq)
xt <- xtabs(~ x_cut + y, df)
matplot(xt, col = levels(df$y), type = "o", pch = c(1, 3, 5), xaxt = "n")
axis(1,  seq_along(sq[-1]), sq[-1])

给出:

【讨论】:

  • 优秀。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2016-01-02
相关资源
最近更新 更多