2012-10-09 48 views
1

给定以下数据格式,如果D1是R中的矩阵,我将如何在每天使用单个随机数1填充列X2,时间间隔为0630年& 1030 (包括的)??每天只有一个1,出现在随机点1。真正的数据是更长的,也许1000天或更多,所以我最终与1000 1的全部放置之间0630 & 1030.在矩阵列的范围内的随机点上创建1

请注意,虽然这是5分钟的数据,我想找到一个解决方案工作与其他时期也。 (15分钟,1分钟等)如果有必要,这可能是第二步。

D1 <- structure(c(1110920, 1110920, 1110920, 1110920, 1110920, 1110920, 
1110920, 1110920, 1110920, 1110920, 1110920, 1110920, 1110920, 
1110920, 1110920, 1110920, 1110920, 1110920, 1110920, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 1110921, 
1110921, 1110921, 1110921, 1110921, 1110921, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 1110922, 
1110922, 1110922, 1110922, 1110922, 2225, 2230, 2235, 2240, 2245, 
2250, 2255, 2300, 2305, 2310, 2315, 2320, 2325, 2330, 2335, 2340, 
2345, 2350, 2355, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 
100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 200, 
205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 300, 305, 
310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 400, 405, 410, 
415, 420, 425, 430, 435, 440, 445, 450, 455, 500, 505, 510, 515, 
520, 525, 530, 535, 540, 545, 550, 555, 600, 605, 610, 615, 620, 
625, 630, 635, 640, 645, 650, 655, 700, 705, 710, 715, 720, 725, 
730, 735, 740, 745, 750, 755, 800, 805, 810, 815, 820, 825, 830, 
835, 840, 845, 850, 855, 900, 905, 910, 915, 920, 925, 930, 935, 
940, 945, 950, 955, 1000, 1005, 1010, 1015, 1020, 1025, 1030, 
1035, 1040, 1045, 1050, 1055, 1100, 1105, 1110, 1115, 1120, 1125, 
1130, 1135, 1140, 1145, 1150, 1155, 1200, 1205, 1210, 1215, 1220, 
1225, 1230, 1235, 1240, 1245, 1250, 1255, 1300, 1305, 1310, 1315, 
1335, 1340, 1345, 1350, 1355, 1400, 1405, 1410, 1415, 1420, 1425, 
1430, 1505, 1510, 1515, 1520, 1525, 1530, 1535, 1540, 1545, 1550, 
1555, 1600, 1605, 1610, 1615, 1620, 1625, 1630, 1635, 1640, 1645, 
1650, 1655, 1700, 1705, 1710, 1715, 1720, 1725, 1730, 1735, 1740, 
1745, 1750, 1755, 1800, 1805, 1810, 1815, 1820, 1825, 1830, 1835, 
1840, 1845, 1850, 1855, 1900, 1905, 1910, 1915, 1920, 1925, 1930, 
1935, 1940, 1945, 1950, 1955, 2000, 2005, 2010, 2015, 2020, 2025, 
2030, 2035, 2040, 2045, 2050, 2055, 2100, 2105, 2110, 2115, 2120, 
2125, 2130, 2135, 2140, 2145, 2150, 2155, 2200, 2205, 2210, 2215, 
2220, 2225, 2230, 2235, 2240, 2245, 2250, 2255, 2300, 2305, 2310, 
2315, 2320, 2325, 2330, 2335, 2340, 2345, 2350, 2355, 0, 5, 10, 
15, 20, 25, 30, 35, 40, 45, 50, 55, 100, 105, 110, 115, 120, 
125, 130, 135, 140, 145, 150, 155, 200, 205, 210, 215, 220, 225, 
230, 235, 240, 245, 250, 255, 300, 305, 310, 315, 320, 325, 330, 
335, 340, 345, 350, 355, 400, 405, 410, 415, 420, 425, 430, 435, 
440, 445, 450, 455, 500, 505, 510, 515, 520, 525, 530, 535, 540, 
545, 550, 555, 600, 605, 610, 615, 620, 625, 630, 635, 640, 645, 
650, 655, 700, 705, 710, 715, 720, 725, 730, 735, 740, 745, 750, 
755, 800, 805, 810, 815, 820, 825, 830, 835, 840, 845, 850, 855, 
900, 905, 910, 915, 920, 925, 930, 935, 940, 945, 950, 955, 1000, 
1005, 1010, 1015, 1020, 1025, 1030, 1035, 1040, 1045, 1050, 1055, 
1100, 1105, 1110, 1115, 1120, 1125, 1130, 1135, 1140, 1145, 1150, 
1155, 1200, 1205, 1210, 1215, 1220, 1225, 1230, 1235, 1240, 1245, 
1250, 1255, 1300, 1305, 1310, 1315, 1335, 1340, 1345, 1350, 1355, 
1400, 1405, 1410, 1415, 1420, 1425, 1430, 1435, 1505, 1510, 1515, 
1520, 1525, 1530, 1535, 1540, 1545, 1550, 1555, 1600, 1605, 1610, 
1615, 1620, 1625, 1630, 1635, 1640, 1645, 1650, 1655, 1700, 1705, 
1710, 1715, 1720, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0), .Dim = c(500L, 3L), .Dimnames = list(NULL, c("Date", 
"Time", "X2"))) 
+0

矩阵实际上并不是正确的数据类型你在描述。一个'data.frame'会更适合你。另外,你的具体用例是什么?你可以扩展你的问题,包括你的最终目标吗?它听起来像'sample'并且将一个'data.frame'子集化将是最好的解决方案。 – Justin

回答

2
library("plyr") 
resample <- function(x, ...) x[sample.int(length(x), ...)] # from `sample` documentation 
D2 <- as.matrix(ddply(as.data.frame(D1), .(Date), function(DF) { 
    intime <- which(DF$Time >= 630 & DF$Time <= 1030) 
    if (length(intime) > 0) { 
    DF[resample(intime,1),"X2"] <- 1 
    } 
    DF 
})) 

这会把矩阵划分成data.frame,使用从plyrddply看一天-AT-A-时间,然后匿名函数发现落在该项目的指标您的给定时间范围内,随机选取一个(使用sample通过resample)并为其指定1。整个事情变成一个矩阵(因为它是如何开始的)。

而不是显示整个输出D2,只是看在不同的D1

> which(D2 != D1, arr.ind = TRUE) 
    row col 
[1,] 117 3 
[2,] 405 3 
+0

有三个“日期”值。 –

+0

@DWin是的,有3个日期值,但第一个在指定范围内没有任何时间。 –

+0

+1我没注意到。 (很明显。)猜测plyr解决方案胜出。 –

0

我在的地方改变了D1对象。

D1 [ , "X2"] <- ave(D1[, "Time"] , D1[ , "Date"], 
     FUN= function(x){ x[sample(length(x), 1)] <- 1; return (x) }) 
unique(D1[ , "Date"]) 
#[1] 1110920 1110921 1110922 
which(D1 == 1, arr.ind = TRUE) 
# ---- 
    row col 
[1,] 11 3 
[2,] 51 3 
[3,] 419 3 

这是通过发送日报“泰晤士报”的功能sample然后返回从那些“时代”的长度一个伪随机行值。在ave函数中,该值用作设置单个随机数1的索引。ave返回与d [“X2”]长度相同的矢量

+0

谢谢。这个确实会添加随机的'1'值,但是错误地将时间列复制到X2中。此外,第一个'1'在错误的时间。我非常欣赏这一努力。 – LGTrader