R 如何根据其他(数据)表中的信息合并行/添加它们的值?

R 如何根据其他(数据)表中的信息合并行/添加它们的值?,r,data.table,lookup,R,Data.table,Lookup,我的信息存储在两个数据框/data.tables中,我想使用存储在第二个数据框/data.tables(我的查找表)中的信息在第一个数据框中添加/折叠行 我的第一个data.table如下所示: ID Sample01 Sample02 Sample03 1 1 2 3 2 0 1 2 3 2 0 1 4

我的信息存储在两个数据框/data.tables中,我想使用存储在第二个数据框/data.tables(我的查找表)中的信息在第一个数据框中添加/折叠行

我的第一个data.table如下所示:

ID    Sample01    Sample02    Sample03
1        1            2           3
2        0            1           2
3        2            0           1 
4        5            2           1
0    12    4    1
12    0    3    5
4     3    0    6
1     5    6    0
我的第二个data.table(距离矩阵)如下所示:

ID    Sample01    Sample02    Sample03
1        1            2           3
2        0            1           2
3        2            0           1 
4        5            2           1
0    12    4    1
12    0    3    5
4     3    0    6
1     5    6    0
如果第二个data.table中显示距离的属性小于2,我想在第一个data.table中添加行的值


然后看起来应该是这样的(添加了第1行和第4行,因为距离),显然您应该对数据集上的所有情况进行循环,但是这个想法可能会对您有所帮助

df1 <- data.frame("ID"=c(1,2,3,4),"Sample01"=c(1,0,2,5),
              "Sample02"=c(2,1,0,2),"Sample03"=c(3,2,0,1))
# df1
#   ID Sample01 Sample02 Sample03
# 1  1        1        2        3
# 2  2        0        1        2
# 3  3        2        0        0
# 4  4        5        2        1
dist_matrix <- matrix(c(0,12,4,1,
                       12,0,3,5,
                       4,3,0,6,
                       1,5,6,0),nrow = 4,ncol = 4)
#> dist_matrix
#     [,1] [,2] [,3] [,4]
#[1,]    0   12    4    1
#[2,]   12    0    3    5
#[3,]    4    3    0    6
#[4,]    1    5    6    0
df12


diag(dist_matrix)如果与dput()共享示例数据,那就太好了。那么,值的总和仅基于第二个表的第一列?或者它至少需要两个距离@Ronak Shah第二个表似乎是一个距离矩阵。@sindri_baldur,这是正确的!我进行了相应的编辑。@PaulEndymion我想添加类似/小距离的行。如果两行的距离为1,则添加y。当然,如果其中一行与其他行之间的距离为1,也会添加这些。我希望通过将类似行添加到一起来减少0值,从而“提高样本之间的共享程度”。感谢您的帮助,我对其进行了一些修改,以更好地满足我的需要,并将答案放在原始问题中!
diag(matrix) <- 99
pos <- which(matrix<2,arr.ind = T,useNames = F)
datasubset_raw <- datasubset
for(j in 1:nrow(pos)){datasubset[pos[j,1],] <- datasubset[pos[j,1],]+datasubset_raw[pos[j,2],]}
df1 <- data.frame("ID"=c(1,2,3,4),"Sample01"=c(1,0,2,5),
              "Sample02"=c(2,1,0,2),"Sample03"=c(3,2,0,1))
# df1
#   ID Sample01 Sample02 Sample03
# 1  1        1        2        3
# 2  2        0        1        2
# 3  3        2        0        0
# 4  4        5        2        1
dist_matrix <- matrix(c(0,12,4,1,
                       12,0,3,5,
                       4,3,0,6,
                       1,5,6,0),nrow = 4,ncol = 4)
#> dist_matrix
#     [,1] [,2] [,3] [,4]
#[1,]    0   12    4    1
#[2,]   12    0    3    5
#[3,]    4    3    0    6
#[4,]    1    5    6    0
diag(dist_matrix) <- 999
pos <- which(dist_matrix<=2,arr.ind = T,useNames = F)
# pos
#      [,1] [,2]
# [1,]    4    1
# [2,]    1    4
for(i in 1:nrow(pos)){pos[i,] <- sort(pos[i,])} # sort
# pos
#     [,1] [,2]
#[1,]    1    4
#[2,]    1    4
pos <- unique(pos) # your final vector
#pos
#     [,1] [,2]
#[1,]    1    4
df1[pos[1],2:4] <- df1[pos[1],2:4]+df1[pos[2],2:4]
#df1
#  ID Sample01 Sample02 Sample03
#1  1        6        4        4
#2  2        0        1        2
#3  3        2        0        0
#4  4        5        2        1
df1 <- df1[-pos[2],]
# df1
#   ID Sample01 Sample02 Sample03
# 1  1        6        4        4
# 2  2        0        1        2
# 3  3        2        0        0