我有一個大型數據集,其模式類似於下面的dataPattern
。我需要幫助的代碼來創建desiredresult
數據集根據模式創建新列
library(data.table)
V1 <- rep(c(rep("a", times = 2), letters[2:5],
rep("f", times = 2)), times = 2)
V2 <- c(c(c(0.24, 0.25), 2:5, c(0.95, 1.05)),
c(c(0.34, 0.35), 2:5, c(1.95, 2.05)))
(dataPattern <- data.table(V1, V2))
(desiredresult <- data.table(V1, V2, c(rep(c(0.24, 0.25), times = 4),
rep(c(0.34, 0.35), times = 4)),
c(rep(c(0.95, 1.05), times = 4),
rep(c(1.95, 2.05), times = 4))))
我需要幫助的desiredresult
創建列V3
。所述圖案如下:
如果V1 == "a"
然後V3 = V2
到達如果V1 != "a"
我們重複前面的相應的一組V2
值直到a
新值 然後V2
新值被放置在V3
等。上述重複爲所有新值a
。
我也需要你的幫助的代碼在desiredresult
創建列V4
這類似於V3
列除非它檢查是否V1 == "f"
和f
從V2
值放入V4
和重複它,如果V1 != "f"
我曾嘗試:
rle(dataPattern$V1 == "a")
# Run Length Encoding
# lengths: int [1:4] 2 6 2 6
# values : logi [1:4] TRUE FALSE TRUE FALSE
其中V1 != "a"
或V1 != "f"
似乎是等於FALSE
減去的數量的序列TRUE
。這是每個a
序列需要多少次重複進行,直到達到新的a
非常感謝
是否「f V1!=」a「我們重複上一組數值,直到達到a的新值,然後將V2的新值置於V3」真的意味着「f V1!=」a 「我們重複上一組V1值,直到達到a的新值,然後將V2的新值置於V3」中? –
Shawn,這裏是我的意思:如果在「V1」中找到「a」,則將V2的值複製到「V3」。如果在「V1」中找不到「a」,則將上述V2值重複爲「V3」,直到在「V1」中找到一個新值 –