R 中 cut() 函数的中断组

问题描述 投票:0回答:1

我想使用函数

df$Timestamp
(breaks =
cut()
;groups =
NumDate$Date
)按另一个数据帧中包含的中断组对给定数据帧 (
NumDate$Groups
) 的字段进行分类。这个想法是获取一个数据帧,其中包含每组中断的一列分类时间戳(例如:“日期_”+组)或作为数据帧列表(时间戳、值、日期)。

时间戳 价值观 日期_2006 日期_2008 日期_2021
2013-11-07 23:00:00 1.62 [2013-08-08 02:00:00;2020-06-11 02:00:00) [2013-08-08 02:00:00;2020-06-11 02:00:00) 不适用

当我应用没有任何中断组的剪切时,它可以正常工作

NumDate <- structure(c(1151539200, 1160870400, 1168992000, 1175558400, 1195171200, 
1228089600, 1247616000, 1279497600, 1322524800, 1375920000, 1591833600, 
1660608000), tzone = "CET", class = c("POSIXct", "POSIXt"))

df %>% mutate(Date=cut(Timestamp, NumDate,include.lowest = TRUE))

但是,当我尝试在应用之前按组拆分中断时

purrr::imap()
,它似乎不起作用(代码来源:通过分组断点改变/剪切到分组数据

NumDate <- structure(list(S = c(0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 
9, 10, 10, 10, 11, 11, 11), Groups = c(2006, 2006, 2006, 2006, 
2006, 2006, 2008, 2006, 2008, 2006, 2008, 2006, 2008, 2006, 2008, 
2006, 2008, 2021, 2006, 2008, 2021), Date = structure(c(1151539200, 
1160870400, 1168992000, 1175558400, 1195171200, 1228089600, 1228089600, 
1247616000, 1247616000, 1279497600, 1279497600, 1322524800, 1322524800, 
1375920000, 1375920000, 1591833600, 1591833600, 1613952000, 1660608000, 
1660608000, 1660608000), tzone = "CET", class = c("POSIXct", 
"POSIXt"))), row.names = c(NA, -21L), class = c("tbl_df", "tbl", 
"data.frame"))

boundaries <- NumDate %>% pivot_wider(names_from = S, values_from = Date) %>%
  split(~Groups) %>%
  purrr::map(\(x) t(x[-1])[, 1])

df %>%
  purrr::imap(\(x, y) {
    x |>
      mutate(bin = cut(Timestamp,
                       breaks = c(-Inf, boundaries[[y]], Inf)
      ))
  }) |>
  bind_rows()

我收到该错误:

Error in `map2()`:
ℹ In index: 1.
ℹ With name: Timestamp.
Caused by error in `UseMethod()`:
! no applicable method for 'mutate' applied to an object of class "c('POSIXct', 'POSIXt')"
Run `rlang::last_trace()` to see where the error occurred.

如果我将 POSIXct 转变为数值,我会遇到类似的错误。

我也尝试过其他方法,但没有找到完美的匹配...

要分类的数据框:

df <- structure(list(Timestamp = structure(c(1383861600, 1383865200, 
1383868800, 1383872400, 1383876000, 1383879600, 1383883200, 1383886800, 
1404903600, 1404907200, 1404910800, 1404914400, 1404918000, 1404921600, 
1404925200, 1404928800, 1404932400, 1404936000, 1404939600, 1404943200, 
1404946800, 1404950400, 1404954000, 1404957600, 1404961200, 1406685600, 
1406689200, 1406692800, 1406696400, 1406700000, 1411257600, 1411261200, 
1411264800, 1411268400, 1418421600, 1418425200, 1418428800, 1419004800, 
1419008400, 1419012000, 1419015600, 1420732800, 1420736400, 1420740000, 
1420743600, 1420747200, 1420750800, 1420754400, 1425013200, 1425016800, 
1442430000, 1442433600, 1442437200, 1442440800, 1448859600, 1448863200, 
1448866800, 1448938800, 1448942400, 1448946000, 1448949600, 1448953200, 
1448956800, 1448960400, 1448964000, 1448967600, 1448971200, 1448974800, 
1448978400, 1448982000, 1448985600, 1448989200, 1448992800, 1448996400, 
1.449e+09, 1449003600, 1456002000, 1456005600, 1456009200, 1456012800, 
1456016400, 1456020000, 1456023600, 1456027200, 1456030800, 1456034400, 
1464840000, 1464843600, 1464847200, 1464850800, 1464904800, 1464908400, 
1489014000, 1489017600, 1489021200, 1489024800, 1489867200, 1489870800, 
1489874400, 1514959200, 1514962800, 1514966400, 1514970000, 1514973600, 
1520956800, 1525046400, 1525050000, 1525053600, 1525057200, 1525060800, 
1525064400, 1525068000, 1525071600, 1525075200, 1525078800, 1527861600, 
1527865200, 1527868800, 1527872400, 1545613200, 1545616800, 1545620400, 
1545624000, 1545627600, 1547391600, 1547395200, 1547398800, 1547402400, 
1547406000, 1547409600, 1547413200, 1547416800, 1547420400, 1547424000, 
1547427600, 1547431200, 1547434800, 1549800000, 1549803600, 1549807200, 
1549810800, 1549814400, 1549818000, 1549821600, 1552658400, 1552662000, 
1552665600, 1552669200, 1552672800, 1552676400, 1552680000, 1552683600, 
1552687200, 1552690800, 1552694400, 1552698000, 1552701600, 1552705200, 
1552708800, 1552712400, 1552716000, 1552719600, 1601182800, 1601186400, 
1601190000, 1606849200, 1606852800, 1610460000, 1610463600, 1611288000, 
1611291600, 1611295200, 1611838800, 1611842400, 1611846000, 1611849600, 
1611853200, 1611856800, 1611860400, 1611864000, 1611867600, 1611871200, 
1611874800, 1611878400, 1611882000, 1611885600, 1611889200, 1611892800, 
1611896400, 1611900000, 1611903600, 1611907200, 1611910800, 1611914400, 
1611918000, 1611921600, 1611925200, 1611928800, 1611932400, 1611936000, 
1611939600, 1611943200, 1611946800, 1611950400, 1611954000, 1611957600, 
1626228000, 1626231600, 1626235200, 1626238800, 1626242400, 1626246000, 
1626249600, 1626253200, 1626256800, 1626260400, 1626264000, 1626267600, 
1626271200, 1626274800, 1626278400, 1626282000, 1626285600, 1626289200, 
1626292800, 1626296400, 1626300000, 1626303600, 1626307200, 1626310800, 
1626314400, 1626318000, 1626321600, 1626325200, 1626328800, 1626332400, 
1626336000, 1626339600, 1626343200, 1626346800, 1626350400, 1626354000, 
1626357600, 1626361200, 1626364800, 1626368400, 1626372000, 1626375600, 
1626379200, 1626382800, 1626386400, 1626390000, 1626393600, 1626397200, 
1626400800, 1626404400, 1626408000, 1626411600, 1626415200, 1626418800, 
1626422400, 1626426000, 1626429600, 1626433200, 1626436800, 1626440400, 
1626444000, 1626447600, 1629691200, 1629694800, 1629698400, 1629702000, 
1629705600, 1629709200, 1629712800, 1629716400, 1630173600, 1630177200, 
1630180800, 1630184400, 1630260000, 1630263600, 1630267200, 1630270800, 
1630274400, 1630278000, 1630281600, 1630285200, 1630288800, 1630292400, 
1630296000, 1630299600, 1630303200, 1630306800, 1638284400, 1638288000, 
1638291600, 1638295200, 1638298800, 1638302400, 1638306000, 1638309600, 
1638313200, 1638316800, 1638320400, 1638324000, 1638327600, 1638370800, 
1638374400, 1638378000, 1638381600, 1638385200, 1638388800, 1638403200, 
1638406800, 1638410400, 1638414000, 1640728800, 1640732400, 1640736000, 
1640739600, 1640743200, 1640746800, 1640750400, 1644163200, 1644166800, 
1644170400, 1644174000, 1644177600, 1644181200, 1644184800, 1644188400, 
1644192000, 1644195600, 1644199200), tzone = "CET", class = c("POSIXct", 
"POSIXt")), Value = c(1.64573140246537, 4.20877070264088, 6.81258562804646, 
7.47082072104607, 6.50385589416168, 4.9572946800785, 3.11074136608842, 
0.422462645563417, 0.501101351364259, 3.36704529610597, 8.28633322564738, 
15.0143113886081, 20.9500774042418, 24.1247510828683, 23.0674973715459, 
18.835569981597, 17.3268718480846, 17.2453205976245, 14.6415056722189, 
12.355158114676, 10.5552055152346, 7.66596121321853, 5.36213838771986, 
4.04566820172062, 1.98067403828376, 5.85144589048064, 13.0366935649499, 
9.62610376892093, 5.89804660502929, 1.62825613450963, 2.81074926618151, 
6.2854150447149, 4.97476994803424, 2.43211846047376, 0.597215325120843, 
1.22049988220898, 0.748667647403938, 2.79618654288506, 4.68934057142379, 
3.34957002815023, 0.57391496784652, 2.40590555854015, 7.54945942684692, 
11.4901323508668, 11.3212047606279, 9.76881845722616, 5.19612334214031, 
2.45833136240738, 1.51175434813801, 0.702066932855292, 7.25529241625859, 
11.4260563683624, 6.12231254379464, 2.00979948487666, 2.96802667778319, 
4.36022302492398, 1.47680381222653, 1.45059091029292, 5.36213838771986, 
7.93100277721395, 9.12805863218228, 9.47465144663784, 9.7280428319961, 
9.58532814369087, 9.80085644847836, 9.58532814369087, 9.18922207002738, 
8.87757979148331, 8.30672103826241, 7.96012822380685, 7.3717942026302, 
7.0718021027233, 6.09318709720174, 3.16899225927422, 1.29331349869124, 
0.300135769873226, 3.09035355347338, 5.1378724489545, 8.00964148301479, 
12.2794319535344, 13.1794082532552, 12.4949602583219, 10.3076392191949, 
6.52424370677671, 4.85535561700334, 1.85834716259356, 4.39517356083546, 
5.05340865383508, 4.45633699868056, 1.79135863542989, 4.08935637160997, 
2.01853711885453, 0.870994523094136, 2.24280305761989, 1.20302461425323, 
0.276835412598903, 0.17198380486445, 1.85543461793427, 0.530226797957166, 
0.285573046576772, 7.30771822012581, 5.90969678366644, 3.13112917870345, 
0.209846885435226, 0.402074832948387, 12.4308842758175, 28.8751114221709, 
27.5353408788973, 22.5432393328737, 15.1249880856611, 11.6503223071277, 
8.37953465474467, 5.67669321092322, 3.89130333477823, 0.597215325120843, 
0.862256889116264, 2.80783672152222, 3.29131913496442, 2.8748252486859, 
3.28258150098655, 4.72720365199456, 4.33401012299036, 4.09518146092855, 
2.76706109629216, 2.61852131866835, 7.74459991901937, 12.7658269116359, 
21.1568680750514, 20.7083361975207, 16.1880668863021, 13.8492935248919, 
14.6764562081304, 14.1376354461617, 10.4474413628408, 6.99898848624104, 
3.13404172336274, 0.157421081568, 2.77288618561073, 4.35731048026469, 
4.51167534720708, 3.30005676894229, 2.28066613819067, 2.44085609445164, 
1.16807407834175, 1.57874287530169, 3.3262696708759, 3.73693846783584, 
4.16216998809223, 4.74467891995031, 5.43203945954283, 5.06505883247225, 
4.70972838403882, 4.43886173072482, 4.61070186562295, 4.61943949960082, 
5.42038928090567, 7.1620909871613, 8.36205938678892, 6.73394692224561, 
4.3223599443532, 3.25636859905293, 0.908857603664909, 1.61369341121318, 
3.36122020678739, 1.5467048840495, 0.870994523094136, 0.5797400571651, 
1.70398229565118, 1.29331349869124, 1.19428698027536, 2.29814140614641, 
2.03601238681027, 0.620515682395165, 4.11556927354359, 7.80867590152375, 
11.6386721284906, 14.7288820119976, 17.3618223839961, 18.9811972145615, 
18.8617828835306, 16.1618539843685, 13.9366698646707, 11.2367409655085, 
8.3096335829217, 5.59514196046308, 3.658299762035, 3.116566455407, 
4.22333342593733, 6.23007669618838, 10.4037531929515, 14.7958705391613, 
17.8336546188011, 17.3035714908103, 14.6502433061968, 11.3736305644951, 
9.48047653595642, 9.11640845354513, 8.72612746920022, 7.77955045493085, 
6.73103437758633, 5.76115700604264, 4.72720365199456, 3.5068474397519, 
2.12921381590757, 1.10399809583736, 0.256447599983872, 11.131889357774, 
10.0600729231552, 4.42429900742837, 1.05448483662943, 12.3260326680831, 
18.0812209148408, 21.6753010244051, 30.7187521915017, 32.6089936753811, 
30.6226382177451, 30.8643794244662, 34.6565125708622, 37.9651633038161, 
47.5270474202663, 53.3084485689577, 52.2308070450202, 38.6758242006829, 
33.9342014953582, 33.2730538576993, 41.1223617144868, 70.1313065210187, 
103.73915934457, 130.453018959581, 113.769963151166, 108.568158389673, 
91.1103657018871, 84.1202585195903, 83.805703696387, 79.8708558616857, 
75.4962137834316, 79.2737842065311, 69.3856950882404, 70.745853444129, 
66.7148916356711, 62.8062567029035, 56.4161337204205, 49.6677677448447, 
42.8990139566539, 36.6952938323655, 32.3905528259343, 29.8653766063296, 
28.7236590998878, 28.3479408388393, 26.8363301606676, 24.1655267080984, 
21.1277426284585, 19.2287635106012, 16.8725148812353, 15.0521744691789, 
13.1415451726844, 11.6794477537206, 10.6687947569469, 10.3309395764692, 
9.24747296321319, 8.05624219756344, 6.4659928135909, 4.9864201266714, 
3.658299762035, 3.08161591949551, 2.44668118377022, 1.64573140246537, 
0.719542200811034, 6.07279928458671, 21.8762666058962, 19.2899269484463, 
9.85910734166416, 9.94939622610217, 2.67968475651344, 2.49910698763744, 
0.739930013426068, 2.31270412944286, 6.43977991165729, 1.60786832189459, 
2.47289408570383, 11.1668398936855, 20.1520401675963, 22.1121827232987, 
24.8820126942838, 21.7510271855467, 17.5161872509385, 10.6367567656947, 
10.4940420773895, 10.7037452928584, 9.67270448346958, 11.8483753439595, 
8.68826438862945, 1.86999734123073, 2.52531988957105, 2.90103815061951, 
10.5639431492124, 12.5939867767378, 14.9502354061037, 15.5181816146653, 
16.0803027339084, 16.9802790336291, 15.7948733572979, 12.7483516436802, 
10.1590994415711, 7.37470674728949, 3.477721993159, 1.0311844793551, 
2.50493207695602, 3.47189690384042, 2.8748252486859, 2.45833136240738, 
2.14377653920402, 1.0020590327622, 0.0933450990636118, 1.30205113266911, 
1.03700956867369, 0.372949386355483, 4.51167534720708, 5.80775772059128, 
5.72620647013115, 4.87574342961837, 4.27575922980456, 3.12530408938487, 
0.49818880670497, 6.01163584674161, 12.3289452127424, 10.5814184171682, 
5.87474624775496, 3.09035355347338, 3.33209476019448, 4.90486887621127, 
5.6533928536489, 4.70390329472024, 2.22241524500486, 0.116645456337935
)), row.names = c(NA, -335L), class = c("tbl_df", "tbl", "data.frame"
))
r list purrr cut
1个回答
0
投票

也许这就是OP想要的。
对于

NumDate$Date
中的每个组,剪切
df$Timestamp
。使用这些组和
cbind
以及原始
df
创建一个数据框。

# this is needed to have all values within the breaks limits vector
r <- range(df$Timestamp) + 0:1

tmp <- by(NumDate$Date, NumDate$Groups, \(d) {
  cut(df$Timestamp, breaks = c(r[1L], d, r[2L])) |> as.character()
}) |> do.call(cbind.data.frame, args = _)
tmp[] <- lapply(tmp, as.POSIXct)

result <- cbind(df, tmp)
head(result)
© www.soinside.com 2019 - 2024. All rights reserved.