Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取给定相似样本名称的成对矩阵的值_R_Matrix - Fatal编程技术网

R 提取给定相似样本名称的成对矩阵的值

R 提取给定相似样本名称的成对矩阵的值,r,matrix,R,Matrix,想象一个由多个样本组成的成对距离矩阵,其中一些样本有重复,即一个样本除了末尾的_r外,其他名称相同,而另一些样本则没有。该矩阵显然给出了所有样本对之间的距离,无论是否重复。我感兴趣的只是每个样本复制对之间的值 例如,给定一个带有样本的矩阵,例如: Sample1 Sample1_r Sample2 Sample2_r Sample3 Sample1 0 79 111 113 110 Sample1_r 79

想象一个由多个样本组成的成对距离矩阵,其中一些样本有重复,即一个样本除了末尾的_r外,其他名称相同,而另一些样本则没有。该矩阵显然给出了所有样本对之间的距离,无论是否重复。我感兴趣的只是每个样本复制对之间的值

例如,给定一个带有样本的矩阵,例如:

          Sample1  Sample1_r Sample2 Sample2_r Sample3
Sample1      0        79       111     113      110
Sample1_r    79       0        110     112      109
Sample2      111      110      0       80       115
Sample2_r    113      112      80      0        117
Sample3      110      109      115     117      0
理想情况下,我希望获得具有以下内容的数据帧:

Sample1 79
Sample2 80
如何以易于重复的方式提取此信息?我有几个矩阵,它们都是不同的,所以我不能按位置来做。我知道我应该使用
grep
,但除此之外,我的创造力现在是无效的。非常感谢你的帮助

dput示例

m<-structure(c(0, 79.0003888816214, 111.103209038065, 113.10726184344, 110.411316165512, 79.0003888816214, 0, 110.512687922526, 112.516740727902, 109.820795049973, 111.103209038065, 110.512687922526, 0, 80.1995887790629, 115.32854184629, 113.10726184344, 112.516740727902, 80.1995887790629, 0, 117.332594651665, 110.411316165512, 109.820795049973, 115.32854184629, 117.332594651665, 0), .Dim = c(5L, 5L), .Dimnames = list(c("Sample1", "Sample1_r", "Sample2", "Sample2_r", "Sample3"), c("Sample1", "Sample1_r", "Sample2", "Sample2_r", "Sample3")))
m
示例
样本1样本1样本2样本2样本3
样本1 0 79 111 113 110
样本1_r 79 0 110 112 109
样本211110080115
样本2_r 113 112 80 0 117
样本3 110 109 115 117 0
row.ind
示例
样本1样本1样本2样本2样本3
样本1 0 79 111 113 110
样本1_r 79 0 110 112 109
样本211110080115
样本2_r 113 112 80 0 117
样本3 110 109 115 117 0

row.ind以下是一种使用矩阵提取所需值的方法

如有必要,将
dist
对象转换为
矩阵。您的示例数据已经是class
matrix
,因此在本例中,
as.matrix
不是必需的。然后,使用
grep
查找您感兴趣的
rownames
,并使用
strsplit
获取相关的
colnames
。使用生成的矩阵从原始矩阵中删除子集

## m <- as.matrix(m) # if your object is actually a `dist` matrix
row_names <- grep("_r", rownames(m), value=TRUE)
toget <- cbind(row_names, col_names = unlist(strsplit(row_names, "_r")))
m[toget]
# [1] 79.00039 80.19959

下面是一种使用矩阵提取所需值的方法

如有必要,将
dist
对象转换为
矩阵。您的示例数据已经是class
matrix
,因此在本例中,
as.matrix
不是必需的。然后,使用
grep
查找您感兴趣的
rownames
,并使用
strsplit
获取相关的
colnames
。使用生成的矩阵从原始矩阵中删除子集

## m <- as.matrix(m) # if your object is actually a `dist` matrix
row_names <- grep("_r", rownames(m), value=TRUE)
toget <- cbind(row_names, col_names = unlist(strsplit(row_names, "_r")))
m[toget]
# [1] 79.00039 80.19959
简短答复:

rn <- rownames(m)
sapply(rn[grepl("_r$",rn)], function(x)m[x,substr(x,1,nchar(x)-2)])
简短答复:

rn <- rownames(m)
sapply(rn[grepl("_r$",rn)], function(x)m[x,substr(x,1,nchar(x)-2)])

如何共享您在此处提供的示例的
dput
。如何共享您在此处提供的示例的
dput
。请以更合理的方式格式化您的代码。可读性比保存行更重要。请以更合理的方式格式化代码。可读性比保存行更重要。
Sample1_r Sample2_r 
 79.00039  80.19959