我正在嘗試復制這個 excel 公式:
在此處輸入圖片說明
電子表格
=IF(AND(var1[i 1]=var1[i],var2[i 1]=var2[i],var3[i 1]=var3[i]),0,1)
基本上,我需要使用三 (3) 個變數來確定 row[i 1] 是否等于 row[i]:“periodo_ocurr”、“tipo_riesgo”和“paciente”。如果 row[i 1] 等于 row[i] 則為 0 否則為 1
R中的代碼:
for(i in 1 : nrow(data_ocurr_2019))
{data_ocurr_2019$Flag_Pac[i 1] <- ifelse(data_ocurr_2019$periodo_ocurr[i 1] == data_ocurr_2019$periodo_ocurr[i] &
data_ocurr_2019$tipo_riesgo[i 1] == data_ocurr_2019$tipo_riesgo[i] &
data_ocurr_2019$paciente[i 1] == data_ocurr_2019$paciente[i], 0, 1)}
問題是什么?我的資料超過100萬條記錄,執行需要很長時間
還有另一種方法嗎?更高效?
任何幫助將不勝感激
uj5u.com熱心網友回復:
嘗試:
data_ocurr_2019$Flag_Pac = ifelse(lead(data_ocurr_2019$periodo_ocurr) == data_ocurr_2019$periodo_ocurr &
lead(data_ocurr_2019$tipo_riesgo) == data_ocurr_2019$tipo_riesgo &
lead(data_ocurr_2019$paciente) == data_ocurr_2019$paciente, 0, 1)
這應該快得多,因為它依賴于矢量化計算,因此 R 可以編譯一次代碼并一次將其應用于所有行。
R中向量化的更多解釋:https : //www.noamross.net/archives/2014-04-16-vectorization-in-r-why/
uj5u.com熱心網友回復:
你不需要ifelse或一個回圈。首先提供可重現的資料dput用于測驗:
test <- structure(list(Var1 = c(5.1, 4.7, 4.6, 4.6, 4.6, 5, 5, 5, 4.6,
4.4, 4.9, 4.8, 4.3, 5.8, 5.8, 5.4, 5.4, 5.1, 5.1, 5.1), Var2 = c(3.5,
3.2, 3.1, 3.1, 3.1, 3.6, 3.6, 3.6, 3.4, 2.9, 3.1, 3, 3, 4, 4,
3.9, 3.9, 3.5, 3.5, 3.8), Var3 = c(1.4, 1.3, 1.5, 1.5, 1.5, 1.4,
1.4, 1.4, 1.4, 1.4, 1.5, 1.4, 1.1, 1.2, 1.2, 1.3, 1.3, 1.4, 1.4,
1.5)), row.names = c(NA, -20L), class = "data.frame")
現在比較行:
nrow <- dim(test)[1]
ncol <- dim(test)[2]
match <- rowSums(test[1:(nrow-1), ] == test[2:nrow, ]) == ncol
idx <- which(match) 1
idx
# 3 4 6 7 14 16 18
# 4 5 7 8 15 17 19
我們比較相鄰的行,然后對行求和以查看所有三列是否匹配。然后我們增加行號,假設您要識別重復的行,而不是前一行。由于資料的大小,您將無法使用下一行,但它通過此示例說明了結果:
flag <- rep(" ", nrow)
flag[idx] <- "<---"
cbind(test, flag)
# Var1 Var2 Var3 flag
# 1 5.1 3.5 1.4
# 2 4.7 3.2 1.3
# 3 4.6 3.1 1.5
# 4 4.6 3.1 1.5 <---
# 5 4.6 3.1 1.5 <---
# 6 5.0 3.6 1.4
# 7 5.0 3.6 1.4 <---
# 8 5.0 3.6 1.4 <---
# 9 4.6 3.4 1.4
# 10 4.4 2.9 1.4
# 11 4.9 3.1 1.5
# 12 4.8 3.0 1.4
# 13 4.3 3.0 1.1
# 14 5.8 4.0 1.2
# 15 5.8 4.0 1.2 <---
# 16 5.4 3.9 1.3
# 17 5.4 3.9 1.3 <---
# 18 5.1 3.5 1.4
# 19 5.1 3.5 1.4 <---
# 20 5.1 3.8 1.5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319080.html
