gpt4 book ai didi

R 根据多个条件获取行 - 使用 dplyr 和 reshape2

转载 作者:行者123 更新时间:2023-12-04 13:07:00 25 4
gpt4 key购买 nike

df <- data.frame(
exp=c(1,1,2,2),
name=c("gene1", "gene2", "gene1", "gene2"),
value=c(1,1,3,-1)
)

在试图习惯 dplyrreshape2我偶然发现了一种基于多种条件选择行的“简单”方法。如果我想要那些具有 name 的基因( value 变量)在实验 1 中高于 0 ( exp == 1) 并且同时 value实验 2 中低于 0;在 df 这将是“gene2”。当然必须有很多方法可以做到这一点,例如子集 df 为每组条件(exp==1 & value > 0,和 exp==2 and value < 0)然后加入这些子集的结果:
library(dplyr)    
inner_join(filter(df,exp == 1 & value > 0),filter(df,exp == 2 & value < 0), by= c("name"="name"))[[1]]

虽然这行得通,但看起来很尴尬,我觉得这种条件过滤是 reshape2 的核心。和 dplyr但无法弄清楚如何做到这一点。有人可以在这里启发我吗?

最佳答案

想到的一种替代方法是将数据转换为“宽”格式,然后进行过滤。

这是一个使用“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

同样,使用“dplyr”和“tidyr”:
library(dplyr)
library(tidyr)
df %>%
spread(exp, value) %>%
filter(`1` > 0 & `2` < 0)

关于R 根据多个条件获取行 - 使用 dplyr 和 reshape2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27231319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com