将列表内的每个data.frame除以另一个data.frame

时间:2016-09-05 10:54:53

标签: r list dataframe division

我有一个包含1000个data.frames的列表,我需要将它们分成一个'单个' data.frame。

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

此处列出了我的一个data.frames示例:

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我们可以通过'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

如果我们需要一些软件包,那么来自inner_join的{​​{1}}可能会有所帮助

dplyr

由于OP提到了大约1000个数据集,最好将其保留在library(dplyr) inner_join(df, sing_df, by = "ID") %>% mutate(Num = Num.x/Num.y) %>% select(-Num.x, -Num.y) 中,循环遍历list元素并应用与上面相同的步骤

list