子集数据/基于前7个字母提取数据

mar*_*rie 6 r names subset

我有一个庞大的数据集,其中包含来自不同人群的基因型信息.我想按人口排序数据,但我不知道如何.

我想按"pedigree_dhl"排序.我使用以下代码,但我一直收到错误消息.

newdata <- project[pedigree_dhl == CCB133$*1,  ]
Run Code Online (Sandbox Code Playgroud)

我的问题是,'pedigree-dhl'包含各个基因型的所有名称.只有'pedigree-dhl'列中的前7个字母才是人口名称.在此示例中: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
Run Code Online (Sandbox Code Playgroud)

gau*_*den 6

您可能需要考虑使用regexp在R数据帧中选择行grep的答案.适应您的数据:

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) )
Run Code Online (Sandbox Code Playgroud)

但是您的问题暗示您可能想要选择七个字母的名称,或者只是按谱系名称对行进行排序,并且可能更容易将所有行保存在排序的数据框中.所有这三个操作:子设置,提取新列或排序,可以独立地执行.

# 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)), ]
Run Code Online (Sandbox Code Playgroud)

所有这些都可能是显而易见的 - 我只是为了完整而添加它们.