2016-05-11 5 views
0

У меня есть пх 1df_vector вектор следующим образом:Удалить всю строку/столбец, если row.names/col.names содержать символы из row.names/col.names другого dataframe в R и сохранить

Var1:M1 2.5 
Var1:M2 3.8 
Var1:M3 NaN 
Var1:M4 9.3 
Var2:M1 0.1 
Var2:M2 2.3 
Var2:M3 8.8 
Var2:M4 NaN 

Тогда у меня есть пхпdf_matrix матрицы:

 Var1:M2 Var1:M3 Var1:M4 Var2:M1 Var2:M2 Var2:M3 Var2:M4 
Var1:M1 46900 788888 700000 490603 479063 6468000 649111 
Var1:M2 52823 543189 431863 134696 413000 4980000 550690 
Var1:M3 34343 543199 543169 413000 479006 4689703 567000 
Var1:M4 56655 745893 134000 130000 463090 9806300 790643 
Var2:M1 87676 413596 156000 546970 310000 9730000 700000 
Var2:M2 67786 124397 134680 546300 146900 1312600 669000 
Var2:M3 45332 417933 203333 131588 137900 4690530 978000 
Var2:M4 32422 660796 314796 786000 479000 7690000 796080 

то, что я хочу сделать, это: если строка в df_vector имеет NaN значение, то использовать его row.name и найдите его в df_matrix и удалите все строки и/или столбцы целиком, которые имеют то же имя, что и имя row.name, для которого есть значение NaN в df_vector. НО в то же время сохраните эти удаленные столбцы/строки в новый фреймворк данных в том же порядке. Поэтому в этом конкретном примере в df_vector Var1: M3 и Var2: M4 имеют значения NaN, поэтому из строк df_matrix, которые имеют имя Var1: M3 и Var2: M4, должны быть полностью удалены, а столбцы с именем Var1: M3 и Var2: M4 также должен быть полностью удален. И эти удаленные строки и столбцы должны создать новую фреймворк данных в том же формате, что и df_matrix.

Каков наилучший способ достичь этого? Поскольку мой исходный набор данных составляет 10 000 х 10 000 матриц, когда я пытался писать, если и для, но он был очень медленным и потребовался очень много времени для компиляции.

+1

Добро пожаловать в SO. Не могли бы вы добавить код, который вы пробовали, хотя он медленный. Обычно ожидаемый формат вопросов заключается в том, что вы показываете, что вы пытались в дополнение к описанию желаемого результата. – dww

ответ

0

Я думаю, что это будет быстрее избежать цикла. Самый простой способ - сделать это в два этапа.

# remove rows and then remove columns 
df_matrix[is.nan(df_vector[,1]),] <- NULL 
df_matrix <- df_matrix[,!is.nan(df_vector[,1])] 

Приведенный выше код может не работать, как ожидалось, если имена столбцов и имена строк не точно совпадать с порядком в двух кадрах данных. Если это так, то получите имена строк из df_vector и используйте% in%, чтобы сохранить эти конкретные строки и столбцы. Для второй части хранения удаленных данных неясно, чего вы хотите, поскольку в основном это будет копия существующей df_matrix с кучей нерелевантных строк и столбцов. Какие значения вы хотите в дополнительных ячейках-заполнителях?

+0

Это отлично работало. Я попробовал 'df_matrix <- df_matrix [,! Is.nan (df_vector [, 1])]' и 'df_matrix <- df_matrix [! Is.nan (df_vector [, 1]),]'. Это удалило строки и столбцы, которые я хотел. По второй части моего вопроса я имел в виду, что хочу создать новую фреймворк/матрицу из этих значений, которые соответствуют указанному выше условию, т. Е. Сделать новый dataframe 'newdf' из строк/столбцов, которые будут удалены из df_matrix , – DoeNoe

Смежные вопросы