【问题标题】:Divide each data.frame inside of a list by another data.frame将列表中的每个 data.frame 除以另一个 data.frame
【发布时间】:2021-03-07 21:15:42
【问题描述】:

我有一个包含 1000 个 data.frame 的列表,我需要将它们中的每一个除以一个“单个”data.frame。

关键是 data.frames 中的每个观察(包含在列表中)都有特定的 ID,这些 ID 必须与“单个”data.frame 匹配,并且必须忽略未包含在后者中的 ID(因为不可分割)。

这是列表中包含的我的 data.frame 之一的示例:

df = read.table(text = 'ID   Num
                        D     34
                        W     45
                        Q     12
                        Y     45
                        B     11
                        O      2', header = TRUE)

“单个”data.frame 如下:

sing_df = read.table(text = 'ID  Num
                              D   14
                              Q   11
                              B    9', header = TRUE)

df 除以sing_df我的输出应该是:

ID   Num
D    2.428
Q    1.09
B    1.22

有什么建议吗?

【问题讨论】:

    标签: r list dataframe division


    【解决方案1】:

    我们可以通过“ID”merge 数据集,并通过将“Num.x”除以“Num.y”来创建“Num”。

    transform(merge(df, sing_df, by = "ID"), Num = Num.x/Num.y)[-(2:3)]
    #  ID      Num
    #1  B 1.222222
    #2  D 2.428571
    #3  Q 1.090909
    

    如果我们需要一些软件包,那么来自dplyrinner_join 会有所帮助

    library(dplyr)
    inner_join(df, sing_df, by = "ID") %>%
            mutate(Num = Num.x/Num.y) %>%
            select(-Num.x, -Num.y)
    

    正如 OP 提到的大约 1000 个数据集,最好将其保存在 list 中,循环遍历 list 元素并应用与上述相同的步骤

    lst1 <- lapply(lst, function(dat) transform(merge(dat, sing_df, by = "ID"), 
                 Num = Num.x/Num.y)[-(2:3)])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      相关资源
      最近更新 更多