将新列添加到多个数据框

时间:2020-07-23 09:31:52

标签: r

我想对多个数据帧执行相同的操作-例如,将列“ A”除以1000,然后写为新列,称为“计算”。我已经在数据框列表上使用mapply和lapply找到了类似问题的许多答案,但是它们并没有更改实际的数据框,仅更改列表中的项。 我想修改原始数据框。另外,可能有数百个数据帧可以对其执行操作。

例如原始数据框:

df1
A
1
2
3
4
5

df2
A
10
11
12
13
14
15

所需的输出:

df1
A   Calculation
1   0.001
2   0.002
3   0.003
4   0.004
5   0.005

df2
A   Calculation
10  0.01
11  0.011
12  0.012
13  0.013
14  0.014
15  0.015

这看起来应该很简单,但我无法弄清楚。

2 个答案:

答案 0 :(得分:2)

使用mget获取列表中的所有数据框。如果您的数据称为df1df2,则可以使用paste0构造数据帧名称的字符串。对于更复杂的名称,您可以使用特定的模式来查找数据帧(类似df\\d+的意思是df,后跟数字)。

一旦数据在列表中,您就可以使用lapply执行想要的计算,这将返回列表。

new_list <- lapply(mget(paste0('df', 1:2)), transform, Calculation = A/100)

要使用原始数据帧中的新列获取更改的数据帧,请使用list2env

list2env(new_list, .GlobalEnv)

答案 1 :(得分:0)

我认为您的问题出在您对data.frame而不是data.frame列表使用lapply的事实:

library(tidyverse)
df1 <- data.frame(x = 1:5)
df2 <- data.frame(x = 10:15)

df_list <- list(df1, df2)
lapply(df_list, function(.x) mutate(.x, calculation = X / 1000))

此代码返回所需数据的列表。帧

如果您想就地进行操作(尽管有副本),则可以在变异后添加分配,也可以使用data.table进行操作:

library(data.table)
df1 <- data.table(x = 1:5)
df2 <- data.table(x = 10:15)

df_list <- list(df1, df2)
lapply(df_list, function(.x) .x[, calculation := X / 1000])