我正在嘗試使用 R 中的大型資料集,我需要創建一個列,將現有列中的值與它后面的所有值進行比較(例如:第 1 行需要比較第 1-10,000 行,第 2 行需要比較第 2-10,000 行,第 3 行需要比較第 3-10,000 行等),但不知道如何寫范圍。
我目前有一列原始數值和一列由以下生成的行值:
samples$row = seq.int(nrow(samples))
我嘗試使用以下命令生成列:
samples$processed = min(samples$raw[samples$row:10000])
但得到錯誤“數值運算式有 10000 個元素:僅第一個使用”并且生成的列只有第 1 行的值對 10,000 行中的每一行重復。
我需要如何撰寫此命令,以便范圍的下限是當前正在計算的行而不是 1?
任何幫助將不勝感激,因為我的編程經驗很少。
uj5u.com熱心網友回復:
如果您只需要min特定行和所有后續行的 ,那么
rev(cummin(rev(samples$val)))
# [1] 24 24 24 24 24 24 24 24 24 24 24 24 165 165 165 165 410 410 410 882
如果您有其他一些沒有cumulative 變體的函式(并且您使用的min只是一個占位符),那么以下之一:
mapply(function(a, b) min(samples$val[a:b]), seq.int(nrow(samples)), nrow(samples))
# [1] 24 24 24 24 24 24 24 24 24 24 24 24 165 165 165 165 410 410 410 882
sapply(seq.int(nrow(samples)), function(a) min(samples$val[a:nrow(samples)]))
使用mapplyover的唯一原因sapply是,如果出于某種原因,您想要類似視窗的操作,而不是總是轉到框架的底部。(盡管如果您想要 Windows,我建議使用zoo或slider軟體包。)
資料
set.seed(42)
samples <- data.frame(val = sample(1000, size=20))
samples
# val
# 1 561
# 2 997
# 3 321
# 4 153
# 5 74
# 6 228
# 7 146
# 8 634
# 9 49
# 10 128
# 11 303
# 12 24
# 13 839
# 14 356
# 15 601
# 16 165
# 17 622
# 18 532
# 19 410
# 20 882
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/378689.html
標籤:r
上一篇:合并資料并填補缺失資料
下一篇:展開表格并填空r
