1

次のデータ形式が与えられた場合、D1 が R の行列である場合、0630 と 1030 (両端を含む) の時間の間、列 X2 に単一のランダムな 1 を毎日入力するにはどうすればよいでしょうか?? 1日に1つだけ、その1つがランダムなポイントに現れます。実際のデータははるかに長く、おそらく 1000 日以上かかるため、1000 個の 1 がすべて 0630 と 1030 の間に配置されることになります。

これは 5 分間のデータですが、他の期間でも機能するソリューションを見つけたいと思います。(15 分、1 分など) 必要に応じて、2 番目のステップになる可能性があります。

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")))
4

2 に答える 2

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 に変換され、 from を使用ddplyplyrて 1 日 1 日を調べた後、無名関数が指定された時間範囲内にあるエントリのインデックスを見つけ、ランダムに 1 つを選択します ( sampleviaを使用resample) 。それに 1 を割り当てます。全体がマトリックスに戻されます (それが開始方法であるため)。

出力全体を表示するのではなくD2D1

> which(D2 != D1, arr.ind = TRUE)
     row col
[1,] 117   3
[2,] 405   3
于 2012-10-09T18:57:05.613 に答える
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"] と同じ長さのベクトルを返します。

于 2012-10-09T18:58:54.897 に答える