Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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中找到两个常用coulmn_R - Fatal编程技术网

如何在R中找到两个常用coulmn

如何在R中找到两个常用coulmn,r,R,我有三个不同的数据集,分别命名为mus、dom和cas。它们有相同的colname,包括CRA、CHROM、POS、REF和ALT。我需要根据每个数据集中的CHROM找到相同的REF和ALT值。换句话说,我想有REF和ALT的值,这两个值都是相同的。例如,在所有数据集中都可以找到REF:A和ALT:T,它们可能处于不同的色度,而且我需要保留其他列。我怎样才能在R中做到这一点?请参见下面的样本格式。每个名为“cas”、“dom”和“mus”的样本都有不同的CRA和相同的色度,具有不同的POS、RE

我有三个不同的数据集,分别命名为mus、dom和cas。它们有相同的colname,包括CRA、CHROM、POS、REF和ALT。我需要根据每个数据集中的CHROM找到相同的REF和ALT值。换句话说,我想有REF和ALT的值,这两个值都是相同的。例如,在所有数据集中都可以找到REF:A和ALT:T,它们可能处于不同的色度,而且我需要保留其他列。我怎样才能在R中做到这一点?请参见下面的样本格式。每个名为“cas”、“dom”和“mus”的样本都有不同的CRA和相同的色度,具有不同的POS、REF和ALT。现在我想根据色度在这三个样本之间找到相同的REF和ALT值

CRA色度位置参考高度
多莫76 chr1 3365296 T A
dom_76 chr1 3540134 T C
多莫76 chr1 3665288 A G
dom_76 chr1 7110674 T C
dom_76 chr1 8920460 A G

谢谢。

我们可以在创建id列(
.id
)的同时,使用
绑定行将数据集绑定到单个数据中,然后按“REF”、“ALT”、“CHROM”、“filter
对“grp”的不同元素数为3的行进行分组,即在所有三个数据集中具有公共值的行

library(dplyr)
bind_rows(cas, dom, mus, .id = 'grp') %>%
         group_by(REF, ALT, CHROM) %>%
         filter(n_distinct(grp) == 3)

我们可以使用
bind_rows
将数据集绑定到单个数据中,同时创建一个id列(
.id
),然后按“REF”、“ALT”、“CHROM”和
过滤器对“grp”的不同元素数为3的行进行分组,即在所有三个数据集中具有公共值的行

library(dplyr)
bind_rows(cas, dom, mus, .id = 'grp') %>%
         group_by(REF, ALT, CHROM) %>%
         filter(n_distinct(grp) == 3)

因为CHROM在任何地方都是相同的,所以保持列的排序是没有用的。 否则,如果我能很好地理解你的问题,你的问题就是要求对一对变量进行排序。这可以使用data.table快速完成,如下所示:

# Supposing the 3 samples are put together in the same CSV file
# with space separators

library(data.table)
DT <- fread("~/Documents/a.csv", sep=" ", header=TRUE)
setkey(DT, REF, ALT)
DT[.(REF, ALT), .(CRA, POS, REF, ALT)]

> DT[.(REF, ALT), .(CRA, POS, REF, ALT)]
      CRA     POS REF ALT
1: dom_76 3665288   A   G
2: dom_76 8920460   A   G
3: dom_76 3665288   A   G
4: dom_76 8920460   A   G
5: dom_76 3365296   T   A
6: dom_76 3540134   T   C
7: dom_76 7110674   T   C
8: dom_76 3540134   T   C
9: dom_76 7110674   T   C
然而,你的问题有点模棱两可,因为“普通”可以解释为“平等”。我不认为这是您要求的,但为了完整性和以防万一,下面是相应的排序(在发布的数据中为空):


因为CHROM在任何地方都是相同的,所以保持列的排序是没有用的。 否则,如果我能很好地理解你的问题,你的问题就是要求对一对变量进行排序。这可以使用data.table快速完成,如下所示:

# Supposing the 3 samples are put together in the same CSV file
# with space separators

library(data.table)
DT <- fread("~/Documents/a.csv", sep=" ", header=TRUE)
setkey(DT, REF, ALT)
DT[.(REF, ALT), .(CRA, POS, REF, ALT)]

> DT[.(REF, ALT), .(CRA, POS, REF, ALT)]
      CRA     POS REF ALT
1: dom_76 3665288   A   G
2: dom_76 8920460   A   G
3: dom_76 3665288   A   G
4: dom_76 8920460   A   G
5: dom_76 3365296   T   A
6: dom_76 3540134   T   C
7: dom_76 7110674   T   C
8: dom_76 3540134   T   C
9: dom_76 7110674   T   C
然而,你的问题有点模棱两可,因为“普通”可以解释为“平等”。我不认为这是您要求的,但为了完整性和以防万一,下面是相应的排序(在发布的数据中为空):


谢谢你的回复。但这对我不起作用。我在vecseq(f_uuu,len_uu,if(allow.cartesian | | notjoin | | | | |!anyDuplicated(f_uu,):Join结果超过2^31行(内部vecseq达到物理限制)。很可能是指定错误的联接。请检查i中是否存在重复的键值,其中每个键值都会一次又一次地联接到x中的同一组。如果没有问题,请尝试by=.EACHI为每个组运行j以避免较大的分配。否则,请在常见问题解答、Wiki、堆栈溢出和data.table问题跟踪器中搜索此错误消息以获取建议。这可能会发生在r如果你的库中有重复项。你应该快速删除这些重复项:
dt非常感谢。它工作正常。我改用by=EACHI。这可能会避免重复项,这取决于你的数据结构,尽管它不是通用的。此外,你还使用了by=。EACHI,注意点!这看起来像是另一个问题。遵守so规则,哟你应该写一篇新的帖子。谢谢你的回复。但这对我来说不起作用。我在vecseq(f_uuuuuuuuuuuuuuuuif)中发现了错误(allow.cartesian | | | notjoin | | | |!anyDuplicated(f_uuuuuuuuuuuu,:Join结果超过2^31行(内部vecseq达到物理限制)。很可能是指定错误的联接。请检查i中是否存在重复的键值,其中每个键值都会一次又一次地联接到x中的同一组。如果没有问题,请尝试by=.EACHI为每个组运行j以避免较大的分配。否则,请在常见问题解答、Wiki、堆栈溢出和data.table问题跟踪器中搜索此错误消息以获取建议。这可能会发生在r如果你的库中有重复项。你应该快速删除这些重复项:
dt非常感谢。它工作正常。我改用by=EACHI。这可能会避免重复项,这取决于你的数据结构,尽管它不是通用的。此外,你还使用了by=。EACHI,注意点!这看起来像是另一个问题。遵守so规则,哟你应该写一篇新文章。