我有一个对称的数据框,并希望选择数据的一个子集用于分析。这意味着同时选择所需的行和列,并保持正确的顺序,以便新数据框仍然是对称的多维数据集。带有示例数据:
# 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的数据帧合并来分别选择行,但这似乎不够优雅,并且还留下了不再匹配行的错误列。寻找更优雅的解决方案,谢谢!
答案 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)]