我正在尋找一個很好的方法來計算連續連續削減在data.table最長號碼(包1.9.2版本)中R.我可怕的失敗和任何幫助非常感謝。對於我試圖做的例子,減少值是一個值小於或等於以前的值(< =)。
下面是我正在處理的數據的玩具樣本。我也放下了迄今爲止最好的一次嘗試,但說實話卻犯了可怕的錯誤,並且返回了一個錯誤。我的嘗試也使用2 for循環,我不是非常熱衷於,因爲我被建議應用循環更常用於R.我已經嘗試搜索此網站和網絡的類似解決方案,但沒有任何運氣。行實際上我在我的整個數據表的數量剛剛超過100萬我都列數爲17
library(data.table)
TEST_DF <- data.table(COL_1 = c(5,2,3,1), COL_2 = c(1,0,4,2),
COL_3 = c(0,1,6,3), COL_4 = c(0,0,0,4))
TEST_DF$COUNT <- as.numeric(0)
for(i in 1:NROW(TEST_DF))
{
for (j in 1:(NCOL(TEST_DF) - 1))
{
TEST_DF$COUNT[j] <- if (TEST_DF[i, j, with = FALSE] >=
TEST_DF[i, j + 1, with = FALSE])
{
TEST_DF$COUNT[j] + 2
}
}
}
DESIRED <- data.table(COL_1 = c(5,2,3,1), COL_2 = c(1,0,4,2),
COL_3 = c(0,1,6,3), COL_4 = c(0,0,0,4),
COUNT = c(4,2,1,0))
所需的輸出出現在代碼的底部。由於4個「COL」列出現在最長的縮減順序中,第一行的COUNT列將得到值4.在第二行中,前2列和後2列減少但沒有在這之間,COUNT會爲此得到2的值。在最後一列中,從COL_3減少到COL_4,因此COUNT在該行將獲得2的值。在沒有減少的任何行中,例如最後的COUNT值將爲0。
讓我知道是否需要進一步澄清或信息。
非常感謝你提前。
這有點兒難看,所以我不想將它張貼作爲一個答案,但也許有人會拿出一些更加優雅:'sapply(1:nrow (TEST_DF),函數(x){tmp < - 其中(c(0,diff(order(TEST_DF [x,],decrease = TRUE)))<1) = ncol(TEST_DF) - 1)0 else tmp; min(ncol(TEST_DF),tmp)})'給我'4 2 1 0''if'行在那裏處理最後一行的特殊情況。 – rawr
歡呼聲,幫助Rawr。你的功能可行,但@ Andrie's在他的佈局方式中更容易理解。 –