按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, ]