我是R的一个新学习者,目前,我正在研究一些infinium 450 k数据。我有这样的数据:
IlmnID | RefGene_Location | RefGene_Name
------------- | ---------------------------------------------------------------| ----------------------------------------------
cg27656579 | Body;5'UTR;5'UTR;5'UTR | MIR5096;GNG4;GNG4;GNG4
cg03503114 | TSS1500;1stExon;1stExon;5'UTR;1stExon;5'UTR;5'UTR;5'UTR;1stExon| CAPZA1;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L RefGene_Location列中的元素与RefGene_Name列中的基因相对应。我想要的是保留与"5'UTR“、”1 1stExon“和"TSS1500”相对应的基因,而不是"Body“。最后,将它们编译成如下结果:
IlmnID | RefGene_Name
----------- | ------------
cg27656579 | GNG4
cg03503114 | CAPZA1
cg03503114 | ST7L发布于 2017-08-13 11:05:20
您可以使用tidyverse包。第一次劈开和解开柱子。过滤并移除副本。
library(tidyverse)
df %>%
mutate_at(vars(-ID), funs(strsplit(., ';'))) %>%
unnest() %>%
filter(loc1 %in% v1) %>%
select(-loc1) %>%
unique()这给了,
ID name1 1 A GNG4 4 B CAPZA1 5 B ST7L
Where,
v1 <- c("5'UTR", "1stExon" ,"TSS1500")
df <- structure(list(ID = c("A", "B"), loc1 = c("Body;5'UTR;5'UTR;5'UTR",
"TSS1500;1stExon;1stExon;5'UTR;1stExon;5'UTR;5'UTR;5'UTR;1stExon"
), name1 = c("MIR5096;GNG4;GNG4;GNG4", "CAPZA1;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L;ST7L"
)), .Names = c("ID", "loc1", "name1"), row.names = c(NA, -2L), class = "data.frame")发布于 2017-08-13 09:04:17
要做到这一点,我们将尝试三个简单的阶段。
阶段1:行选择
首先,我们将在dataframe中选择行,其中RefGene_Location包含所有三个短语-- 5'UTR、1stExon和TSS1500,而不是短语Body。我想您正在使用的数据文件名为‘`df’
df <- df[all(c("5'UTR", "1stExond", "TSS1500") %in% df$RefGene_Location) &
!"Body" %in% df$RefGene_Location, ]阶段2:基因名称
现在我们要从RefGene_Name列中获取基因名称。我将假设名称总是出现在该列的最后一个;之后的文本中,并将RefGene_Name列替换为这个条目。
# Split df$RefGene_Name into chunks separated by ";", and keep the last chunk
df$RefGene_Name <- sapply(strsplit(df$RefGene_Name, ";"), function(x) x[length(x)])阶段3:去除多余的列
这就是你在问题中给出的相同格式的数据。我们不再需要数据集中的其他列,如RefGene_Location,因此我们将删除这些列。
# Keep the two columns "IlmnID" and "RefGene_Name"
df <- df[, c("IlmnID", "RefGene_Name")]https://stackoverflow.com/questions/45597854
复制相似问题