У меня есть два объекта: матрица и dataframe. Матрица имеет номера во всех ячейках. Второй кадр данных имеет NA в нескольких ячейках. Как я могу убедиться, что первая матрица имеет NA в том же точном положении, что и в последнем кадре данных.Репликация местоположений ячеек NA в одном кадре данных в другом
Я попробовал complete.case() и na.omit, но это, к сожалению, удаляет ряд вместе. Я попробовал цикл for, где он итерации по столбцу, затем по строке, проверяет, где ячейка равна нулю, и возвращает местоположение, которое затем будет загружаться в dataframe indp. Получите несколько ошибок вокруг размеров:
Выполнение моей логики. Это итерации по одному столбцу за раз подряд; где ячейка содержит 0, затем взять одно и то же местоположение ячейки в матрице indp и установить значение 0, но ничего не происходит.
numZero <- 0
cols <- 0
for (i in 1:ncol(ws)){
for (k in 1:nrow(ws)){
if (is.na(ws[k,i])){
print(indp[i,k])
indp[i,k] <- 0
numZero <- numZero + 1
}
}
cols <- cols +1
}
Следует отметить, что indp является матрицей.
Добавлено cols и numzero, чтобы сохранить вкладку на количество строк и столбцов, потому что я продолжаю получать следующую ошибку: Ошибка в indp [i, k]: индекс за пределами. Indp и ws имеют одинаковые размеры. Однако счетчики col и numzero возвращают cols и строки, которые отличаются от размеров. Также с матрицей indp ничего не происходит. Я что-то упускаю?
также прилагаю фотографии двух, чтобы помочь осмыслять: indp
Обратите внимание на 0-х: ws
Глядя сделать следующее: Оригинальная матрица:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
кадр данных:
V1 V2 V3 V4 V5
1 1 5 1 0 NA
2 3 3 1 2 2
3 0 1 5 4 NA
4 5 NA 3 2 0
5 NA 0 3 4 1
Я хотел бы, первая матрица будет поступать в соответствии с выше - имеют Nas точно в тех же клетках:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 NA
[2,] 2 7 12 17 22
[3,] 3 8 13 18 NA
[4,] 4 NA 14 19 24
[5,] NA 10 15 20 25
В дополнение к этому,
m1 <- matrix(1:25, 5, 5);set.seed(25);
dat1 <- as.data.frame(matrix(sample(c(NA,0:5), 5*5, replace=TRUE), ncol=5))
numZero <- 0
cols <- 0
for (i in 1:ncol(dat1)){
for (k in 1:nrow(dat1)){
if (is.na(dat1[k,i])){
print(dat1[i,k])
m1[i,k] <- 0
numZero <- numZero + 1
}
else{
print(dat1[i,k])
}
}
cols <- cols +1
}
Печать записи ячеек на каждой итерации для сравнения с исходными объектами данных, но я получаю разные цифры к тому, что в них странно, как я думал, m1 [1,1], например должен вернуть запись ячейки.
Вы можете сделать 'm1 [is.na (dat1)] <- NA' – akrun
Не уверен, что я следую akrun? Как это относится к обеим объектам? –
Как я понимаю вопрос 'm1 <- matrix (1:25, 5, 5); set.seed (25); dat1 <- as.data.frame (matrix (sample (c (NA, 0: 5), 5 * 5, replace = TRUE), ncol = 5)) 'Код выше заменяет значения в' m1' на NA для соответствующих значений 'NA' в 'dat1' – akrun