У меня есть большая матрица с именем data
из 10 864 строк и 134 столбцов.
Первые 4 столбца являются параметрами, которые делают каждую строку уникальной.Данные от 5-го до 134-го столбца для всех строк - это числа от 1 до 20.

Я запускаю цикл for в матрице, чтобы вставить NA
в определенные ячейки матрицы.Это необходимо сделать на основе уникальных значений из столбцов OrgID
, rank
и scorei
, только если значение в той же строке для столбца score(i+12) != 1
.
Следовательно, я запускаю for loop
из столбца 5 в 134, и там, где есть дублирование на основе этих трех столбцов, а значение в 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"
}
Этот код, однако, дает неправильный вывод, вставляя NA
только в том случае, если имеется дублированное значение на основе 1
st, 4
th и i
th столбец, т. е. эквивалентный результат выполнения следующего кода:
for(i in 5:ncol(data){
data[which(duplicated(data[,c(1,4,i)])),i] <- "NA"
}
Как заставить его выполнить требуемую операцию только при значении в столбце score(i+12) !=1
в дублированных строках.
Чтобы упростить просмотр неудачного вывода, я выделил несколько строк и соответствующие столбцы, чтобы показать, как это работает при применении к столбцу 118, т. Е. i =118
здесь.

Например, на основе объясненной выше логики, в OrgID=5659
есть дублирование.Дублирование на основе OrgID, ранга и показателя118 идентифицирует эти 2 строки, причем одна строка показывает значение в score130=1
, а другая score130=16
.Следовательно, в строке с score130=16
должно быть теперь NA
в соответствии с логикой.Но это остается неизменным на 16
.