首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一列的值选择列内的元素

根据另一列的值选择列内的元素
EN

Stack Overflow用户
提问于 2017-08-09 18:11:13
回答 2查看 146关注 0票数 0

我是R的一个新学习者,目前,我正在研究一些infinium 450 k数据。我有这样的数据:

代码语言:javascript
复制
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“。最后,将它们编译成如下结果:

代码语言:javascript
复制
IlmnID      | RefGene_Name
----------- | ------------
cg27656579  | GNG4
cg03503114  | CAPZA1
cg03503114  | ST7L
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-13 11:05:20

您可以使用tidyverse包。第一次劈开和解开柱子。过滤并移除副本。

代码语言:javascript
复制
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,

代码语言:javascript
复制
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")
票数 1
EN

Stack Overflow用户

发布于 2017-08-13 09:04:17

要做到这一点,我们将尝试三个简单的阶段。

阶段1:行选择

首先,我们将在dataframe中选择行,其中RefGene_Location包含所有三个短语-- 5'UTR1stExonTSS1500,而不是短语Body。我想您正在使用的数据文件名为‘`df’

代码语言:javascript
复制
df <- df[all(c("5'UTR", "1stExond", "TSS1500") %in% df$RefGene_Location) & 
         !"Body" %in% df$RefGene_Location, ]

阶段2:基因名称

现在我们要从RefGene_Name列中获取基因名称。我将假设名称总是出现在该列的最后一个;之后的文本中,并将RefGene_Name列替换为这个条目。

代码语言:javascript
复制
# 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,因此我们将删除这些列。

代码语言:javascript
复制
# Keep the two columns "IlmnID" and "RefGene_Name"
df <- df[, c("IlmnID", "RefGene_Name")]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45597854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档