データフレームのリストに要素ごとに関数を適用したいと思います。単純な関数を適用することはできますが、引数を参照する方法がわからないため、より複雑な関数を適用することはできません。
データフレームに対して次のアクションを実行できます。
df1 <- data.frame(
A = c(1, 2),
B = c(1, 3)
)
centered <- apply(df1, 2, function(x) x - mean(x))
scaled <- apply(centered, 2, function(x) x/sqrt(sd(x)))
次に、2つのデータフレームのリストを作成します(行数は同じですが、列数は異なります)。
df1 <- data.frame(
A = c(1, 2),
B = c(1, 3))
df2 <- data.frame(
A = c(1, 2, 3, 4),
B = c(1, 2, 3, 4))
l=list(df1,df2)
mapplyは私がやりたいことをしているようだということを学びました。しかし、上からのアクションをどのように適用するのですか?これがfunction(x、y)のマップです。代わりにcentered
、アクションを上scaled
から適用したいと思います。
l_output <- mapply(function(x,y) x*y, x = 2, y = list, SIMPLIFY = FALSE)
を使用して同じ関数を適用しlapply
ます。これは、中央揃え関数とスケーリングされた関数の両方を一緒に適用します。
lapply(l, function(y) apply(y, 2, function(x) {
x = x - mean(x)
x/sqrt(sd(x))
}))
#[[1]]
# A B
#[1,] -0.5946036 -0.8408964
#[2,] 0.5946036 0.8408964
#[[2]]
# A B
#[1,] -1.3201676 -1.3201676
#[2,] -0.4400559 -0.4400559
#[3,] 0.4400559 0.4400559
#[4,] 1.3201676 1.3201676
別々に欲しい場合
centered <- lapply(l, function(y) apply(y, 2, function(x) x - mean(x)))
scaled <- lapply(centered, function(y) apply(y, 2, function(x) x/sqrt(sd(x))))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加