![](/img/trans.png)
[英]Deleting rows that are duplicated in one column based on value in another column
[英]Identify duplicated rows based on multiple columns and specific value in another column in very large matrix with for loop
我有一個大矩陣,稱為 10,864 行和 134 列的data
。
前 4 列是使每一行唯一的參數。 所有行的第 5 列到第 134 列的數據是 1 到 20 之間的數字。
我在矩陣中運行一個 for 循環以將NA
插入矩陣的某些單元格中。 這需要基於來自 Columns OrgID
、 rank
和scorei
的唯一值來完成,前提是列score(i+12) != 1
的同一行中的值。
因此,我從第 5 列到第 134 列運行一個for loop
,並且基於這三列存在重復並且score(i+12)
列值中的值不等於 1,我將NA
插入到矩陣的該單元格中。
for(i in 5:ncol(data){
data[which(duplicated(data[,c(1,4,i)]) & (data[,i+12])!=1),i] <- "NA"
}
但是,此代碼給出了錯誤的 output,方法是僅在基於第1
、第4
和第i
列存在重復值的地方插入NA
,即與運行以下代碼等效的結果:
for(i in 5:ncol(data){
data[which(duplicated(data[,c(1,4,i)])),i] <- "NA"
}
僅當重復行中列score(i+12) !=1
中的值時,如何使其執行所需的操作。
為了更簡單地查看失敗的 output,我突出顯示了幾行和相關列,以顯示當應用於列 118 時它是如何工作的,即此處i =118
。
例如,根據上面解釋的邏輯, OrgID=5659
中存在重復。 基於 OrgID、rank 和 score118 的重復標識了這 2 行,其中一行顯示score130=1
和其他score130=16
中的值。 因此,根據邏輯,在score130=16
的行中現在應該是NA
。 但這在16
時保持不變。
也許你可以試試
for(i in 5:(ncol(data) - 12)) {
inds <- duplicated(data[c(1,4,i)]) | duplicated(data[c(1,4,i)], fromLast = TRUE)
data[inds & data[[i + 12]] != 1, i + 12] <- NA
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.