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

将列表中的每个data.frame除以另一个data.frame,r,list,dataframe,division,R,List,Dataframe,Division,我有一个1000个data.frame的列表,我需要用一个“单个”data.frame来划分它们 关键是data.frames(包含在列表中)中的每个观察值都有特定的ID,必须与“单个”data.frames匹配,并且必须忽略后者中未包含的ID(因为不可能进行分割) 下面是列表中包含的一个data.frames的示例: df = read.table(text = 'ID Num D 34

我有一个1000个data.frame的列表,我需要用一个“单个”data.frame来划分它们

关键是data.frames(包含在列表中)中的每个观察值都有特定的ID,必须与“单个”data.frames匹配,并且必须忽略后者中未包含的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

有什么建议吗?

我们可以
通过'ID'合并数据集,并通过将'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

如果我们需要一些软件包,那么来自
dplyr
internal\u join
会很有帮助

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

正如OP提到的大约1000个数据集,最好将其保存在
列表
中,循环通过
列表
元素,并应用与上面相同的步骤

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

lst1我们可以
通过'ID'合并
数据集,并通过将'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

如果我们需要一些软件包,那么来自
dplyr
internal\u join
会很有帮助

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

正如OP提到的大约1000个数据集,最好将其保存在
列表
中,循环通过
列表
元素,并应用与上面相同的步骤

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