Выбор по строкам и столбцам в симметричной матрице в R - PullRequest
0 голосов
/ 20 ноября 2018

У меня симметричный фрейм данных, и я хотел бы выбрать подмножество данных для использования в анализе.Это означает, что нужно выбрать нужные строки и столбцы и поддерживать правильный порядок, чтобы новый фрейм данных оставался симметричным кубом.С примерами данных:

# Example data 
Sample <- c('Sample_A', 'Sample_B', 'Sample_C', 'Sample_D', 'Sample_E') 
Sample_A <- c(0, 3.16, 1, 1.41, 3) 
Sample_B <- c(3.16, 0, 3, 2.83, 1) 
Sample_C <- c(1, 3, 0, 1, 2.83) 
Sample_D <- c(1.41, 2.83, 1, 0, 2.65) 
Sample_E <- c(3, 1, 2.83, 2.65, 0) 
df = data.frame(Sample, Sample_A, Sample_B, Sample_C, Sample_D, Sample_E)
df

Затем я отдельно определяю интересующие меня сэмплы, например:

samples_to_use <- c("Sample_B", "Sample_D", "Sample_E")

То, что я хочу получить в итоге, выглядит следующим образом

# Desired output
Sample <- c('Sample_B', 'Sample_D', 'Sample_E')
Sample_B <- c(0, 2.83, 1)
Sample_D <- c(2.83, 0, 2.65)
Sample_E <- c(1, 2.65, 0)
df_2 = data.frame(Sample, Sample_B, Sample_D, Sample_E)
df_2

то есть я выбираю строки и столбцы, которые соответствуют samples_to_use.

Я пробовал отдельно выбирать строки, объединяя df с фреймом data samples_to_use, но это кажется неэффективным, а также оставляет меня с неправильными столбцами, которые недлиннее совпадение строк.Ищете более элегантное решение, спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018

Мы можем использовать индекс столбца с «samples_to_use», в то время как индекс строки может быть логическим индексом для проверки, являются ли элементы «samples_to_use» %in% столбец «Sample»

df[df$Sample %in% samples_to_use, c("Sample", samples_to_use)]

ПРИМЕЧАНИЕ.не является симметричной матрицей.Если это должна быть симметричная матрица, первый столбец должен быть удален, и это должны быть имена строк и преобразовать «data.frame» в «matrix»

m1 <- as.matrix(df[-1])
row.names(m1) <- df$Sample

Тогда поднабор будет проще

m1[samples_to_use, samples_to_use]
#         Sample_B Sample_D Sample_E
#Sample_B     0.00     2.83     1.00
#Sample_D     2.83     0.00     2.65
#Sample_E     1.00     2.65     0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...