按R中的秩和条件提取行

按R中的秩和条件提取行,r,dataframe,conditional-statements,rank,R,Dataframe,Conditional Statements,Rank,我试图理解如何根据一个数字列中的值从表中提取前十行,但仅从满足应用于第二个数字列的条件的行中提取。 首先是关于数据。我有一个表格,列出了几千个人类基因与对照组的表达差异(log\u fold\u change)和这种差异的p值(p\u value)。该表如下所示: log_fold_change p_value APOD 1.7388209 0.4820801 S100B -1.1514299 0.5995658 CD63 0.606

我试图理解如何根据一个数字列中的值从表中提取前十行,但仅从满足应用于第二个数字列的条件的行中提取。
首先是关于数据。我有一个表格,列出了几千个人类基因与对照组的表达差异(
log\u fold\u change
)和这种差异的p值(
p\u value
)。该表如下所示:

       log_fold_change   p_value
APOD         1.7388209 0.4820801
S100B       -1.1514299 0.5995658
CD63         0.6066951 0.4935413
PMEL        -1.4977796 0.1862176
MT2A        -0.9311173 0.8273733
S100A6      -0.4555436 0.6684667
TIMP1       -1.9464387 0.7942399
VIM         -0.4704482 0.1079436
PAEP         1.4787634 0.7237109
CSTB        -0.6386040 0.4112744
可以使用这些命令重新创建数据(创建包含
n
虚构基因数据的表):


现在,我如何强制执行条件
df$log\u fold\u change>0
,以便我的十个
p\u值最小的基因只从
log\u fold\u change
为正的基因中选择?任何帮助都将不胜感激

dplyr
解决方案:

library(dplyr)

df %>%
  filter(log_fold_change > 0) %>%
  arrange(p_value) %>%
  head(10) %>%
  mutate(labels = rownames(.))
输出:

      A data.frame: 10 × 3
log_fold_change p_value label
   <dbl>       <dbl>    <chr>
0.9672121   0.01423086  MBT4
1.7139128   0.05044393  INQ3
0.4809652   0.10347463  ORW1
0.2949034   0.13493936  FVR2
0.9967781   0.17676960  JHP1
1.0813577   0.23599439  ITE9
1.0670343   0.25001069  ANQ4
1.5954271   0.26273176  XVL8
1.8803123   0.30065841  IQV6
0.3591054   0.46889062  JLD9
A data.frame:10×3
日志\折叠\更改p\值标签
0.9672121 0.01423086 MBT4
1.7139128 0.05044393英寸Q3
0.4809652 0.10347463或W1
0.2949034 0.13493936 FVR2
0.9967781 0.17676960 JHP1
1.0813577 0.23599439 ITE9
1.0670343 0.25001069 ANQ4
1.5954271 0.26273176 XVL8
1.8803123 0.30065841 IQV6
0.3591054 0.46889062 JLD9

首先,使用
过滤器(log\u fold\u change>0)
log\u fold\u change
列中抛出小于或等于
0的所有观察值。然后用
arrange(p\u值)
按升序排列
p\u值
列,并用
head(10)
选择前10个观察值。最后,使用
mutate()
创建带有基因名称的
标签
列。这将为您提供10个具有最低
p\u值的观察值,其中
log\u fold\u change
为正值。

使用基数R,可以如下实现:

  • 通过
    log\u fold\u change>0拆分df
  • 为每个拆分分别设置标签
  • 绑在一起
  • n至9 1.88312825 0.7143039至9
    #>EXG7 1.82497903 0.8082063 EXG7
    #>RGE9 0.02894958 0.7685504 RGE9
    

    由(v0.3.0)于2020-10-03创建,您可以先对数据进行排序,在
    log\u fold\u change>0
    处获取10个值,然后将行名转移到
    标签列中

    df <- df[order(df$log_fold_change), ]
    inds <- which(df$log_fold_change > 0)[1:10]
    df$label[inds] <- rownames(df)[inds]
    
          A data.frame: 10 × 3
    log_fold_change p_value label
       <dbl>       <dbl>    <chr>
    0.9672121   0.01423086  MBT4
    1.7139128   0.05044393  INQ3
    0.4809652   0.10347463  ORW1
    0.2949034   0.13493936  FVR2
    0.9967781   0.17676960  JHP1
    1.0813577   0.23599439  ITE9
    1.0670343   0.25001069  ANQ4
    1.5954271   0.26273176  XVL8
    1.8803123   0.30065841  IQV6
    0.3591054   0.46889062  JLD9
    
    df <- df[order(df$log_fold_change), ]
    inds <- which(df$log_fold_change > 0)[1:10]
    df$label[inds] <- rownames(df)[inds]
    
    df1 <- df[inds, ]