如何创建将不同过滤器应用于数据框的循环

the_one_neuron

我提前道歉,我的问题标题可能没有准确描述我想要做什么。我认为我需要创建的是一个循环,但我会给出更多细节。我有两个数据框

df1

chr location gene sample1 sample2 
1 12345 FAM1 0.1 0
1 124353 ABCA 1 0.5
2 12353 ALMS1 2 0.1
3 23456 TNN 0 0
7 657864 MYBC3 0.3 1

和 df2

sucrose fructose glucose galactose
FAM1 FAM2 ALMS1 ALMS2
FAM2 TNN2 MYBC3 ABCA
FAM3 MYBC2 TNN ABCA2
FAM4 MYBC ABCA2 FAM3
FAM5 ALMS2 ABCA3 FAM4

所以 df1 是我的主要数据框,df2 包含我用来过滤 df1 的列。例如,我将使用 df2(蔗糖)的第一列并过滤 df1 用于蔗糖列中的任何基因。因此,在应用过滤器后,数据将如下所示。

chr location gene sample1 sample2 
1 12345 FAM1 0.1 0

所以我已经能够做到这一点,但真正的 df2 有数千列。所以我想做的是一些如何创建循环?(如果这是正确的术语)将贯穿 df2 中的所有列,将它们作为过滤器应用于 df1,然后将结果另存为新数据框。理想情况下,我希望新数据框与过滤它的列具有相同的名称,因此在我给出的新数据框的示例中,它看起来像这样

sucrose
#   chr location gene sample1 sample2
# 1   1    12345  FAM1   0.1       0  

这是我只为 df2 中的一列运行的脚本示例

sucrose <- df1 %>%
  filter(gene %in% df2[[1]]) %>%
  filter(gene != "")

sucrose$Number.of.MMVD.dogs <- (sucrose$sample1 + sucrose$sample2)

sucrose <- sucrose  %>%
  filter(Number.of.MMVD.dogs >= 0.01)

这个过滤器给了我以下输出

sucrose
#   chr location gene sample1 sample2 Number.of.MMVD.dogs
# 1   1    12345  FAM1   0.1       0        0.1

我只是不想为我用来过滤 df1 的每一列都输入这个。我知道有更好的方法来做到这一点而不是手工完成,但我不确定如何做到这一点。我承认,它会创建很多数据框,但我会为一个项目保存它们。

完美的

考虑将宽df2重塑为长格式,tidyr::gather然后dplyr::inner_joindf1一起使用最后,split的数据框返回一个包含许多数据框的列表,理想情况下,它比充斥全球环境的 1,000 个数据框更易于管理:

longdf <- df2 %>%
  tidyr::gather(sugar, gene)

df1 <- df1 %>%
  dplyr::inner_join(longdf, by="gene")

df_list <- split(df1, df1$sugar)

# LIST OF THREE DATA FRAMES
df_list
# $galactose
#   chr location gene sample1 sample2     sugar
# 2   1   124353 ABCA       1     0.5 galactose

# $glucose
#   chr location  gene sample1 sample2   sugar
# 3   2    12353 ALMS1     2.0     0.1 glucose
# 4   3    23456   TNN     0.0     0.0 glucose
# 5   7   657864 MYBC3     0.3     1.0 glucose

# $sucrose
#   chr location gene sample1 sample2   sugar
# 1   1    12345 FAM1     0.1       0 sucrose

如果将数据框存储在命名列表中而不是作为单独的对象,则不会失去数据框的功能:

summary(df_list$galactose)
#       chr       location          gene              sample1     sample2       sugar          
#  Min.   :1   Min.   :124353   Length:1           Min.   :1   Min.   :0.5   Length:1          
#  1st Qu.:1   1st Qu.:124353   Class :character   1st Qu.:1   1st Qu.:0.5   Class :character  
#  Median :1   Median :124353   Mode  :character   Median :1   Median :0.5   Mode  :character  
#  Mean   :1   Mean   :124353                      Mean   :1   Mean   :0.5                     
#  3rd Qu.:1   3rd Qu.:124353                      3rd Qu.:1   3rd Qu.:0.5                     
#  Max.   :1   Max.   :124353                      Max.   :1   Max.   :0.5            

str(df_list$glucose)
# 'data.frame': 3 obs. of  6 variables:
#  $ chr     : int  2 3 7
#  $ location: int  12353 23456 657864
#  $ gene    : chr  "ALMS1" "TNN" "MYBC3"
#  $ sample1 : num  2 0 0.3
#  $ sample2 : num  0.1 0 1
#  $ sugar   : chr  "glucose" "glucose" "glucose"

head(df_list$sucrose)
#   chr location gene sample1 sample2   sugar
# 1   1    12345 FAM1     0.1       0 sucrose

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用过滤器将数据框应用于不同变量

熊猫-创建多个过滤器并应用于数据框

如何转换此数据框并将过滤器应用于单元格?

将不同的独立过滤器应用于GROUP BY中的同一列

根据条件将过滤器应用于数据框

巴特沃斯过滤器应用于熊猫数据框的一列

查询数据框,但仅将过滤器应用于列值不是NaN的行

基于用户输入将多个过滤器应用于数据框的pythonic方法

使用熊猫将过滤器列表应用于来自列表的数据框

将过滤器应用于列表并显示数据

我们如何将不同的格式应用于数据框中的不同列?

如何在熊猫数据框中将不同的条件应用于不同月份?

如何在 MongoDB 中创建多个具有不同过滤器的聚合?

如何将过滤器应用于成对?

如何将过滤器应用于 {%...%}?

如何将过滤器应用于* ngFor?

将熊猫过滤器应用于数据框可得到充满NaN的数据框

如何将dplyr过滤器应用于数据帧列表?

如何将Delphi ADOTable过滤器应用于日期数据类型

如何将不同长度的时间窗口应用于熊猫数据框

BigQuery:如何通过将三个不同的过滤器应用于同一列来获取数据?

如何从Python列表中创建不同的数据框(带有过滤器)

适用于不同网址格式的不同过滤器

将过滤器应用于其父循环内的子级

在Power Bi主题创建中将不同的不同数据颜色应用于不同的图表

r - 创建应用于上传的 csv 文件的反应式过滤器

将开始和结束时间作为过滤器应用于数据帧

需要将多个过滤器应用于JSON数据

将中值过滤器应用于2轴的数据