![](/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.