将列表中的每个data.frame除以另一个data.frame
我有一个1000个data.frame的列表,我需要用一个“单个”data.frame来划分它们 关键是data.frames(包含在列表中)中的每个观察值都有特定的ID,必须与“单个”data.frames匹配,并且必须忽略后者中未包含的ID(因为不可能进行分割) 下面是列表中包含的一个data.frames的示例:将列表中的每个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
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