1. ホーム
  2. r

[解決済み] R データフレームの特定の列に対する Apply() 関数

2023-03-21 21:19:05

質問

データフレームにapply関数を使用したいのですが、最後の5列だけに関数を適用したいです。

B<- by(wifi,(wifi$Room),FUN=function(y){apply(y, 2, A)})

これはAをyの全列に適用します。

B<- by(wifi,(wifi$Room),FUN=function(y){apply(y[4:9], 2, A)})

これはyの4〜9列目だけにAを適用したものですが、Bのトータルリターンは最初の3列を切り取ってしまいます...。私はまだそれらをしたい、私はちょうどそれらに適用されるAを望んでいない。

wifi[,1:3]+B 

は、私が期待/望んでいたことをしません。

どのように解決するのですか?

data.frameの例と関数の例(すべての値に+1するだけ)を使っています。

A <- function(x) x + 1
wifi <- data.frame(replicate(9,1:4))
wifi

#  X1 X2 X3 X4 X5 X6 X7 X8 X9
#1  1  1  1  1  1  1  1  1  1
#2  2  2  2  2  2  2  2  2  2
#3  3  3  3  3  3  3  3  3  3
#4  4  4  4  4  4  4  4  4  4

data.frame(wifi[1:3], apply(wifi[4:9],2, A) )
#or
cbind(wifi[1:3], apply(wifi[4:9],2, A) )

#  X1 X2 X3 X4 X5 X6 X7 X8 X9
#1  1  1  1  2  2  2  2  2  2
#2  2  2  2  3  3  3  3  3  3
#3  3  3  3  4  4  4  4  4  4
#4  4  4  4  5  5  5  5  5  5

あるいは、さらに

data.frame(wifi[1:3], lapply(wifi[4:9], A) )
#or
cbind(wifi[1:3], lapply(wifi[4:9], A) )

#  X1 X2 X3 X4 X5 X6 X7 X8 X9
#1  1  1  1  2  2  2  2  2  2
#2  2  2  2  3  3  3  3  3  3
#3  3  3  3  4  4  4  4  4  4
#4  4  4  4  5  5  5  5  5  5