子集数据/提取数据基于第一7个字母(Subset data /extracting data bas

2019-06-23 23:27发布

我有一个庞大的数据与来自不同群体的基因型信息设置。 我想通过人口对数据进行排序,但我不知道怎么办。

我想通过“pedigree_dhl”进行排序。 我是使用下面的代码,但我一直收到错误消息。

newdata <- project[pedigree_dhl == CCB133$*1,  ]

我的问题是也,谓“血统-DHL”所包含的各个基因型的所有名称。 只有在列'血统,DHL的第7个字母是人口name.In这个例子:CCB133。 我怎样才能知道R,那我想提取包含CCB133所有列的数据,?

  Allele1 Allele2      SNP_name gs_entry pedigree_dhl
1       T       T ZM011407_0151      656    CCB133$*1
2       T       T ZM009374_0354      656    CCB133$*1
3       C       C ZM003499_0591      656    CCB133$*1
4       A       A ZM003898_0594      656    CCB133$*1
5       C       C ZM004887_0313      656    CCB133$*1
6       G       G ZM000583_1096      656    CCB133$*1

Answer 1:

你可能要考虑grep在对答案使用正则表达式来选择R中数据帧行 。 适合您的数据:

df <- read.table(text="  Allele1 Allele2      SNP_name gs_entry pedigree_dhl
1       T       T ZM011407_0151      656    CCB133$*1
2       T       T ZM009374_0354      656    CCB133$*1
3       C       C ZM003499_0591      656    CCB133$*1
4       A       A ZM003898_0594      656    CCB133$*1
5       C       C ZM004887_0313      656    CCB133$*1
6       G       G ZM000583_1096      656    CCB133$*1", header=T)

# put into df1 all rows where pedigree_dhl starts with CCB133$
p1 <- 'CCB133$'
df1 <- subset(df, grepl(p1, pedigree_dhl) )

但是你的问题意味着你可能要选择出七个字母的名字,或者只是通过系谱名行进行排序,它可能会更容易在一个排序的数据帧,以保持所有行在一起。 所有这三个操作:子设置,提取新的列或排序,可以独立进行。

# If you want to create a new column based
# on the first seven letter of SNP_name (or any other variable)

df$SNP_7 <- substr(df$SNP_name, start=1, stop=7)

# If you want to order by pedigree_dhl
# then you don't need to select out the rows into a new dataframe

df <- df[ with(df, order(df$pedigree_dhl)), ]

所有这一切都可能是明显的 - 我将它们添加简单的完整性。



文章来源: Subset data /extracting data based on first 7 letters
标签: r subset names