1

私はしばしば時間を使って昼と夜の時間に分類しcut()ます。cut()クロック タイムが 0 付近になることを理解していないため、最初に時間を 3 つのグループ (昼と夜のいずれかの側) に分割し、次に 2 つの「夜」の因子レベルをマージします。これは、同じ「夜」の値を に 2 回指定することで実行できますlevels()。例えば

x <- c(4, 10, 23) # i.e. 4 am, 10 am, 11 pm
x <- cut(x
         , breaks = c(0, 6, 22, 23)
         , include.lowest = FALSE
         , labels = c("night2", "day", "night1"))
# [1] night2 day    night1
# Levels: night2 day night1

levels(x) <- c("night", "day", "night")
x
# [1] night day   night
# Levels: night day

今、私はffオブジェクトの巨大なデータセットで同じことをしようとしています:

require(ff)
require(ffbase)

y <- ff(c(4, 10, 23))
y <- ff(cut(y
            , breaks = c(0, 6, 22, 23)
            , include.lowest = FALSE
            , labels = c("night2", "day", "night1")))
y
# ff (open) integer length=3 (3) levels: night2 day night1
#    [1]    [2]    [3] 
# night2 day    night1 

levels(y) <- c("night", "day", "night")
y
# ff (open) integer length=3 (3) levels: night day night
#  [1]   [2]   [3] 
# night day   night

この場合、levels()は 3 つの因子レベルを保持しており、そのうちの 2 つは同じラベルを持つことに注意してください。recodeLevels有望に見えましたが、まったく同じことはしません:

y <- recodeLevels(y, c("night", "day", "night"))
y
# ff (open) integer length=3 (3) levels: night day night
# [1] [2] [3] 
# NA  day NA  

cut()(実際には)内で重複した「夜」ラベルも試しましcut.ff()たが、それでも3つのレベルが返され、因子の重複レベルは非推奨であるという警告が返されます。

アドバイスありがとうございます。

4

2 に答える 2

2

これは単純すぎるかもしれませんが、次のようにしてください。

x <- c(4, 10, 23)
y = c("day", "night")[(x <= 6 | x > 22) + 1]
y
[1] "night" "day"   "night"
于 2014-02-03T22:44:02.133 に答える