通过R中的对称矩阵中的行和列进行选择

时间:2018-11-19 22:11:22

标签: r dataframe merge

我有一个对称的数据框,并希望选择数据的一个子集用于分析。这意味着同时选择所需的行和列,并保持正确的顺序,以便新数据框仍然是对称的多维数据集。带有示例数据:

# 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与samples_to_use的数据帧合并来分别选择行,但这似乎不够优雅,并且还留下了不再匹配行的错误列。寻找更优雅的解决方案,谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以将列索引与'samples_to_use'一起使用,而行索引可以是逻辑索引,以检查'samples_to_use'元素是否为y列'Sample'

ceiling(sqrt(length(y))

注意:Is不是一个对称矩阵。如果需要是对称矩阵,则应删除第一列,并将其作为行名,并将“ data.frame”转换为“ matrix”

%in%

然后,子设置更容易

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