use*_*672 6 conditional filtering r reshape2 dplyr
df <- data.frame(
exp=c(1,1,2,2),
name=c("gene1", "gene2", "gene1", "gene2"),
value=c(1,1,3,-1)
)
Run Code Online (Sandbox Code Playgroud)
在尝试获得定制时dplyr,reshape2我偶然发现了一种基于几种条件选择行的"简单"方法.如果我想在实验1(== 1)name中具有value高于0的那些基因(变量)并且在实验2中exp同时value低于0; 在df中,这将是"gene2".当然必须有很多方法,例如每组条件的子集df(exp == 1&value> 0,exp == 2和value <0),然后加入这些子集的结果:
library(dplyr)
inner_join(filter(df,exp == 1 & value > 0),filter(df,exp == 2 & value < 0), by= c("name"="name"))[[1]]
Run Code Online (Sandbox Code Playgroud)
虽然这个作品看起来非常akward的,我觉得这样的条件筛选在于在的心脏reshape2和dplyr,但无法弄清楚如何做到这一点.有人可以在这里启发我吗?
A5C*_*2T1 16
想到的另一种选择是将数据转换为"宽"格式,然后进行过滤.
这是使用"data.table"的示例(为了方便复合语句):
library(data.table)
dcast.data.table(as.data.table(df), name ~ exp)[`1` > 0 & `2` < 0]
# name 1 2
# 1: gene2 1 -1
Run Code Online (Sandbox Code Playgroud)
同样,使用"dplyr"和"tidyr":
library(dplyr)
library(tidyr)
df %>%
spread(exp, value) %>%
filter(`1` > 0 & `2` < 0)
Run Code Online (Sandbox Code Playgroud)