先日教えてもらったのでメモ。
サンプルとやりたいこと
以下のように,Global Environmentに連番で形が同じデータフレームが存在するとします:
data_list <- paste("data", 1:3, sep = "")
for(i in 1:length(data_list)) {
assign(
data_list[i],
data.frame(
x1 = rnorm(10),
x2 = rnorm(10)
)
)
}
これで,data1からdata3までのデータフレームが作られます。ここで,これらのデータフレームに対して,同じような処理(例えば,x3 = x1 + x2
のような変数を新たに作成させる)をしたいんです。
でも今回の場合,リストに束ねられているのではなく,それぞれのデータベースがその環境にある状況で,悩んでました。
やり方その1
自分で思いついたのが,get()
でデータフレームを呼び出し,それをfor
で回すというやり方でした:
library(dplyr)
for(i in 1: length(data_list)) {
get(data_list[i]) %>%
mutate(x3 = x1 + x2)
}
確かにこれでやりたいことはできましたが,どうもforを回すのに抵抗が出てしまう…
やり方その2
こちらが教えてもらったやり方:
library(dplyr)
l <- lapply(data_list, get, envir = globalenv())
l <- lapply(l, mutate, x3 = x1 + x2)
get
もlapply
を使って一気に取得する,なるほどでした。ありがとうございました。
Enjoy!