2013-06-19 40 views
0

我在R中有一个data.frame,myTable由一个date,myDate组成;整数,myCount和因子myCategory。它是按日期排序如何从data.frame创建列表后维护订单

我需要从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) 
}) 

然而,结果列表中没有被指明MyDate myCategory内有序。这怎么能实现?如下图所示

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, 
+1

东西lapply中添加适当的顺序解决方案的错' myTable',未完成的副本+粘贴? (另外,不需要像那样格式化它,它不需要非常可读。) – joran

+0

抱歉关于复制和粘贴。 – pssguy

回答

0

我听说过论坛这是创建列表

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) 

}) 
2

myTable的我不明白你为什么要为了绘制它拆分您的数据。我会尽量绘制它而不分裂。另外,如前所述,由于复制和粘贴错误,您的结构会被截断。我必须从你的结构中删除rownames部分才能使用它。 IFor例如,在这里我使用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) 

EDIT

可使用rCharts包来获得同样的事情:

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

enter image description here

这里我的数据是:

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") 
+0

抱歉关于复制和粘贴。我正在尝试使用rCharts的Highcharts方面,这显然需要列表中的数据而不是data.frame – pssguy

+0

@pssguy真的吗?我的观点是'rCharts'受到'data.frame'作为数据源的'lattice'包的启发。你可以看到我的编辑,我使用'rCharts'功能添加相同的情节。 – agstudy

+0

我并不熟悉软件包,但专门开发rCharts的highCharts选项的人表示,如果您想要交互性,例如工具提示/点击事件然后 – pssguy