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

尼古拉斯

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

我的第一个data.table看起来像这样:

ID    Sample01    Sample02    Sample03
1        1            2           3
2        0            1           2
3        2            0           1 
4        5            2           1

我的第二个data.table(距离矩阵)如下所示:

0    12    4    1
12    0    3    5
4     3    0    6
1     5    6    0

如果第二个显示距离的属性小于2,我想在第一个data.table中添加行的值。

然后,它应该看起来像这样(行1和行4相加,因为距离<2):

ID    Sample01    Sample02    Sample03
1        6            4           4
2        0            1           2
3        2            0           1 

由于数据非常大,我希望使用data.table,但我也可以使用其他软件包,我们将为您提供任何帮助!

编辑:

这将是表1(dput)的真实示例:

structure(list(v_j_cdr3 = c("TCRBV02-01-TCRBJ01-01-SLGGmhcLFF", 
"TCRBV02-01-TCRBJ01-01-SLGhLmhcLFF", "TCRBV02-01-TCRBJ01-01-SLLLGchcLFF", 
"TCRBV02-01-TCRBJ01-01-SLLmGmhcLFF"), HIP08805 = c(6.4439e-05, 
0, 0, 8.69177e-05), HIP17837 = c(6.01681e-05, 0, 0, 0), Keck0006_MC1 = c(2.48385e-05, 
4.96771e-05, 0, 0)), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7ffb190066e0>)

这将是表2(dput)的真实示例:

structure(list(`1` = c(0, 2, 3, 2), `2` = c(2, 0, 4, 3), `3` = c(3, 
4, 0, 2), `4` = c(2, 3, 2, 0)), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7ffb190066e0>)

Edit2:解决方案(没有删除行,因为注释使我意识到我不应该这样做)。

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

假设您对条件的对角线不感兴趣,因此它应该> 2

diag(dist_matrix) <- 999

距离<2(1和4)的位置

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据其他表数据向表中添加行

根据其他表中的值添加列

根据其他列数据框中的值添加列

如何根据其他两列中的值在熊猫数据框中添加新列

如何在运行时根据其他表中的值添加新列?

如何根据其他表行值选择数据?

如何根据其他表中的值编写UPDATE

如何使用SQL根据其他两个表的信息查找不在表中的记录?

如何在JOIN之后合并行,其中出现重复的第一列,但其他列中的信息不同

如何根据其他表中的其他关系从 1 列中选择 2 个数据

根据索引合并两个数据框,替换其他列中的匹配值

如何根据数据列的值向X轴添加其他值?

如何根据R中的唯一值合并行?

根据其他值将数据框中的值添加到行

根据其他表中的值删除表中的行

如何根据其他表中的值从表中执行 SQL 查询?

熊猫-根据其他列中的值将数据添加到列中

根据其他列中的值将数据添加到列中

根据字段将数据添加到其他表

根据其他工作表中的查找值删除/添加行

如何在我的数据表中添加一列以显示多个其他列的值的总和?

根据其他数据框添加特定的列值

根据其他列值在列值中添加整数

根据其他列中的值将列添加到数据框

根据其他列中的值向数据框添加因子

Python(Pandas):根据有关数据帧中其他观测值的信息替换特定的 NaN 值

如何根据其他行中的值填充 R 数据框中行中的值

如何根据单元格值将数据复制到其他工作表

如何根据其他数据帧的行将新列添加到数据帧中?