В R мне нужен автоматический (матрица может иметь разное количество столбцов, поэтому заголовки не всегда являются такой же) способ извлечения строк из матрицы на основе нескольких условий, применяемых индивидуально для каждой строки. В частности, я хочу включить строку в новую матрицу, если все столбцы в этой строке, кроме последней, равны, и если последний столбец в строке равен ~ 0.R: («Автоматически») Извлечение строк на основе множества условий, применяемых к каждой строке для изменения числа столбцов
Я не могу вернуться и изменить любой код, кроме входных данных (т. е. все должно запускаться автоматически). Первый цикл for diff вычисляет различия между соответствующими столбцами в наборе данных, а следующий цикл for - извлекает строки diff, которые удовлетворяют условиям.
Rows=nrow(dataSet)
Cols=ncol(dataSet)
diff <- matrix(, nrow = Rows,ncol = Cols/2)
for (i in 1:Cols/2) {
diff[,i]=dataSet[,i]-dataSet[,i+Cols/2];
}
last_change <- matrix(, nrow = Rows, ncol = Cols/2);
T=1;
col1 = ((Cols/2)-1);
col2 = Cols/2;
col3 = 0;
for (k in 1:Rows) {
if (TRUE==all.equal(diff[k,1],diff[k,2:col1])
& TRUE==all.equal(diff[k,col2],col3))
{
last_change[T,] <- subset(diff[k,]);
T=T+1;
}
}
Это выше дает мне матрицу с такими же размерами, как Diff (должны быть равные столбцы с достаточно несколько строк вырезал прочь), наполненную НС. (У меня проблемы с векторизации в автоматическом режиме, так как $ будет указывать разные числа и идентификаторы заголовков каждый раз, когда изменяется входной набор данных). Я довольно новичок в R. Я нашел много вопросов с похожими темами, но ни одна из них, похоже, не включает возможность применения нескольких условий к изменяющемуся количеству столбцов (и изменению идентификаторов кодовых имен).
Огромное улучшение (СПАСИБО)! Тем не менее, теперь я получаю строки со всеми нулями (имеет смысл), которые имеют имя строки из предыдущей матрицы, и еще много строк, где каждое имя и значения строк - и NA соответственно. Хотите узнать, где/как информация может быть потеряна? –
Вы можете удалить строки, имеющие хотя бы одно значение NA, с одним вызовом 'na.omit()', который может быть выполнен либо до, либо после извлечения. Имена строк можно фиксировать после факта, назначая их; см. https://stat.ethz.ch/R-manual/R-devel/library/base/html/colnames.html. Например, 'rownames (m2) <- 1: nrow (m2);'. – bgoldst
Информация не была потеряна; ваша входная матрица должна иметь НС. – bgoldst