R中基于条件的子集

符号

我有长度15000的第2个数值向量,met并且nor其中一些相似的名称存在。例如:

head(met)
     ALB    IGKJ1     IGKC    IGKJ4    IGKJ2    IGHG2 
25.75415 20.55957 18.28749 17.87589 17.22944 16.60235
head(nor)
   SAA1      CRP  RNVU     SNORD68   CYP1A2     IGKJ1 
25.74548 24.05058 16.72566 15.05746 13.75348 10.74111

我想对met是否存在剂量nor以及每个met值是否1.5*nor大于其对应nor进行子集化

在上面的例子中,通过比较,我想要的IGKJ1将是唯一的输出。

我应该如何编码?

安东尼奥斯·K
library(dplyr)

# get named vectors
met = c(25.75415, 20.55957, 18.28749, 17.87589, 17.22944, 16.60235)
names(met) = c("ALB", "IGKJ1", "IGKC", "IGKJ4", "IGKJ2", "IGHG2")

nor = c(25.74548, 24.05058, 16.72566, 15.05746, 13.75348, 10.74111)
names(nor) = c("SAA1", "CRP", "RNVU", "SNORD68", "CYP1A2", "IGKJ1")

# transform them as data frames
dt_met = data.frame(v_met = met)
dt_met$names = row.names(dt_met)

dt_nor = data.frame(v_nor = nor)
dt_nor$names = row.names(dt_nor)

将名称和两个值保留为新数据框行的第一个选项:

# keep names as a dataset
dt_met %>%
  inner_join(dt_nor, by="names") %>%  # keep names that exist in both datsets
  filter(v_met > 1.5*v_nor) %>%       # keep rows where the condition is satisfied
  select(names, everything())         # order columns

#   names    v_met    v_nor
# 1 IGKJ1 20.55957 10.74111

第二个选项是仅保留通过您的标准的名称,然后使用它们来对原始向量进行子集:

# save names as a vector
dt_met %>%
  inner_join(dt_nor, by="names") %>%  
  filter(v_met > 1.5*v_nor) %>%
  pull(names) -> new_names

# subset met using those names
met[names(met) %in% new_names]

#    IGKJ1 
# 20.55957 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章