根据另一个 R 中的共享项目过滤一列中的项目

山姆·利普沃思

我有一个表,每个样本都有一个唯一的标识符,但也有一个部分标识符。我想提取每个部分的所有与所有距离比较​​(此数据来自第二个表)

例如表 1

Sample    Section
1         1
2         1
3         1
4         2
5         2
6         3

表2

sample    sample    distance
1         2         10
1         3         1
1         4         2
2         3         5
2         4         10
3         4         11

所以我想要的输出是一个列表,它的距离为:[1 vs 2]、[1 vs 3]、[2 vs 3]、[4 vs 5] - 即表二中共享一个部分的样本的所有距离比较表格1

我开始尝试使用嵌套的 for 循环来做到这一点,但很快就变得一团糟.. 有什么巧妙的方法可以做到这一点吗?

万维网

使用的解决方案

我们可以先创建一个数据框,显示每个部分的样本组合。

library(dplyr)

table1_cross <- full_join(table1, table1, by = "Section") %>%    # Full join by Section
  filter(Sample.x != Sample.y) %>%                               # Remove records with same samples
  rowwise() %>%
  mutate(Sample.all = toString(sort(c(Sample.x, Sample.y)))) %>% # Create a column showing the combination between Sample.x and Sample.y
  ungroup() %>%
  distinct(Sample.all, .keep_all = TRUE) %>%                     # Remove duplicates in Sample.all
  select(Sample1 = Sample.x, Sample2 = Sample.y, Section)
table1_cross
# # A tibble: 4 x 3
#   Sample1 Sample2 Section
#     <int>   <int>   <int>
# 1       1       2       1
# 2       1       3       1
# 3       2       3       1
# 4       4       5       2

然后,我们可以过滤table2通过table1_crosstable3是最终的输出。

table3 <- table2 %>%                                     
  semi_join(table1_cross, by = c("Sample1", "Sample2")) # Filter table2 based on table1_corss

table3
#   Sample1 Sample2 distance
# 1       1       2       10
# 2       1       3        1
# 3       2       3        5

数据

table1 <- read.table(text = "Sample    Section
1         1
                     2         1
                     3         1
                     4         2
                     5         2
                     6         3",
                     header = TRUE, stringsAsFactors = FALSE)

table2 <- read.table(text = "Sample1    Sample2    distance
1         2         10
                     1         3         1
                     1         4         2
                     2         3         5
                     2         4         10
                     3         4         11",
                     header = TRUE, stringsAsFactors = FALSE)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R:根据另一个变量“着色”绘图

根据R中另一个值的频率,将一列中的多行值合并

根据r中另一个变量的时移生成一个变量

如何在R中的数据框的同一列中显示项目之间的共享功能

根据另一个 R 检查一列的值

根据 R 中一列的值将一个数据框中的值插入到另一个数据框中

根据R中另一个向量的索引更改df列中的值

如何根据另一个向量的值删除R中数据框中的列?

r如何根据条件更改多个列(在另一个列中重复)

根据另一个因子列对R数据框中的因子列进行排序

R,根据另一个属性从一个属性中提取值

R:根据另一个数据框中的一列向数据框中添加一列会导致多个重复行

根据R中另一个矩阵的行和列对矩阵进行排序

R根据另一个中的值创建并填充新列

根据R中的另一个表在数据集中创建“标志”列

根据 R 中另一个变量的条件添加列的值

根据另一个列表 R 中的数据框列创建数据框列表

R:根据另一个data.table中的条件“标记”一行

如何根据变量是否出现在另一个数据框中在R中创建另一个列

根据R中另一个向量中定义的数字位置查找向量的元素

如何根据 R 中另一个变量的值更改变量中的值?

r:根据另一个向量中的双重出现随机分配一个向量中的“1”或“2”

根据另一列 R 中的条件创建一个新列

根据 R 中另一个数据框中的部分文本替换一列中的值

根据基数R中另一个矢量的值生成一个重复值的矢量

如何根据r中另一个变量的变化创建一个新变量

根据 R 中另一个 DataFrame 的条件从 DataFrame 中提取值

根据R中另一个列表的顺序对列表进行排序

根据R中的另一个数据帧更改单元格