将列表中的每个 data.frame 除以另一个 data.frame
Divide each data.frame inside of a list by another data.frame
我有一个包含 1000 个 data.frames 的列表,我需要将每个列表除以 'single' data.frame.
要点是 data.frames(包含在列表中)中的每个观察值都有特定的 ID,这些 ID 必须与 'single' 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)
'single'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
有什么建议吗?
我们可以 merge
数据集 '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
中的 inner_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)])
我有一个包含 1000 个 data.frames 的列表,我需要将每个列表除以 'single' data.frame.
要点是 data.frames(包含在列表中)中的每个观察值都有特定的 ID,这些 ID 必须与 'single' 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)
'single'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
有什么建议吗?
我们可以 merge
数据集 '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
中的 inner_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)])