0

我在 R 中有一个 data.frame,myTable 包含一个 date , myDate; 整数、myCount 和因子、myCategory。它按日期排序

我需要从 data.frame 创建一个列表(为了在 rCharts 中绘制一个 Highcharts 图)

mySeries <- lapply(split(myTable, myTable$myCategory), function(x) {
  res <- lapply(split(x, rownames(x)), as.list)
  names(res) <- NULL
  return(res)
})

但是,结果列表不是按 myCategory 中的 myDate 排序的。如何做到这一点?myTable 如下所示

TIA

myTable <- structure(list(myDate = structure(c(15642, 15649, 15656, 15663, 
15670, 15670, 15677, 15677, 15684, 15684, 15691, 15691, 15698, 
15698, 15705, 15705, 15712, 15712, 15719, 15719, 15726, 15726, 
15733, 15733, 15740, 15740, 15747, 15747, 15754, 15754, 15761, 
15761, 15768, 15768, 15775, 15775, 15782, 15782, 15789, 15789, 
15796, 15796, 15803, 15803, 15810, 15810, 15817, 15817, 15824, 
15824, 15831, 15831, 15838, 15838, 15845, 15845, 15852, 15852, 
15859, 15859, 15866, 15866), class = "Date"), myCount = c(142L, 
338L, 350L, 324L, 490L, 4L, 567L, 178L, 414L, 113L, 489L, 195L, 
241L, 168L, 355L, 164L, 1215L, 253L, 2171L, 222L, 1916L, 437L, 
1820L, 420L, 1897L, 356L, 1632L, 381L, 1571L, 464L, 1835L, 620L, 
1348L, 500L, 1398L, 448L, 2668L, 461L, 2510L, 456L, 2654L, 733L, 
1977L, 617L, 1645L, 523L, 1857L, 550L, 1247L, 477L, 1286L, 560L, 
1168L, 719L, 1264L, 649L, 1162L, 682L, 1149L, 801L, 1450L, 1018L
), myCategory = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L), .Label = c("A", "B"), class = "factor")), .Names = c("myDate", 
"myCount", "myCategory"), row.names = c(62L, 59L, 56L, 55L, 51L, 
52L, 47L, 48L, 49L, 50L, 53L, 54L, 60L, 61L, 57L, 58L, 45L, 46L, 
39L, 40L, 1L, 2L, 23L, 24L, 35L, 36L, 41L, 42L, 31L, 32L, 27L, 
28L, 11L, 12L, 33L, 34L, 37L, 38L, 43L, 44L, 17L, 18L, 15L, 16L, 
7L, 8L, 3L, 4L, 29L, 30L, 19L, 20L, 13L, 14L, 9L, 10L, 21L, 22L, 
4

2 回答 2

2

我不明白您为什么要拆分数据以进行绘制。我会尝试在不分裂的情况下绘制它。此外,如前所述,您的结构由于复制和粘贴错误而被截断。我必须从您的结构中删除行名部分才能使用它。例如,这里我 ggplot2用来绘制数据而不进行拆分。例如:

library(ggplot2)

ggplot(myTable)+
  geom_line(aes(x=myDate,y=myCount,group=myCategory,color=myCategory)) 

或使用这样的刻面分割:

ggplot(myTable) +
  geom_line(aes(x=myDate,y=myCount)) +
  facet_wrap(~myCategory)

编辑

可以使用rCharts包获得相同的东西:

library(rCharts)
rPlot(myCount ~ myDate | myCategory, data = myTable, 
      color = 'myCategory', type = 'line')

在此处输入图像描述

这里我的数据是:

structure(list(myDate = structure(c(15642, 15649, 15656, 15663, 
15670, 15670, 15677, 15677, 15684, 15684, 15691, 15691, 15698, 
15698, 15705, 15705, 15712, 15712, 15719, 15719, 15726, 15726, 
15733, 15733, 15740, 15740, 15747, 15747, 15754, 15754, 15761, 
15761, 15768, 15768, 15775, 15775, 15782, 15782, 15789, 15789, 
15796, 15796, 15803, 15803, 15810, 15810, 15817, 15817, 15824, 
15824, 15831, 15831, 15838, 15838, 15845, 15845, 15852, 15852, 
15859, 15859, 15866, 15866), class = "Date"), myCount = c(142L, 
338L, 350L, 324L, 490L, 4L, 567L, 178L, 414L, 113L, 489L, 195L, 
241L, 168L, 355L, 164L, 1215L, 253L, 2171L, 222L, 1916L, 437L, 
1820L, 420L, 1897L, 356L, 1632L, 381L, 1571L, 464L, 1835L, 620L, 
1348L, 500L, 1398L, 448L, 2668L, 461L, 2510L, 456L, 2654L, 733L, 
1977L, 617L, 1645L, 523L, 1857L, 550L, 1247L, 477L, 1286L, 560L, 
1168L, 719L, 1264L, 649L, 1162L, 682L, 1149L, 801L, 1450L, 1018L
), myCategory = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L), .Label = c("A", "B"), class = "factor")), .Names = c("myDate", 
"myCount", "myCategory"), row.names = c(NA, -62L), class = "data.frame")
于 2013-06-19T15:11:24.280 回答
0

我听说过解决方案的论坛外,它是在创建列表的 lapply 中添加适当的顺序

mySeries <- lapply(split(myTable, myTable$myCategory), function(x) {
  res <- lapply(split(x, rownames(x)), as.list)
  names(res) <- NULL
  res <- res[order(sapply(res, function(x) x$myDate))] ## Provides Solution
  return(res)

})
于 2013-06-19T16:55:52.073 回答