3

データフレームの各サブセットの平均値を取得し、その情報を列に組み込んでいます。

私はラップリーでそれを行うことができますが、「固執」することはできません。副作用のある apply ファミリ関数のバリアントはありますか? plyr ライブラリにあるものも問題ありません。

data <- data.frame(
  A = sample(LETTERS[1:3], 20, replace=TRUE),
  B = runif(20),
  C = LETTERS[1:20])
# split by A
dataByA <- split(data, factor(data$A))
# get average of B per set
lapply(dataByA, function(df) {df$Bmean <- mean(df$B)}) # does nothing!
# remerge subsets
data <- rbind.fill(dataByA)

ありがとう

4

4 に答える 4

8

これを試して:

data$Bmean <- ave(data$B, data$A)
于 2013-04-06T00:57:07.630 に答える
5

この種のことには多くのオプションがありますが、当面の間違いを修正するために、匿名関数はlapply単に何も返しません。操作対象のピースを返すようにするだけです。

{df$Bmean <- mean(df$B); df} 

byddply+ mutate、またはtransformを使用してオプションを表示するのは大衆に任せますdata.table

于 2013-04-06T00:36:53.980 に答える
2

@joran によると、私は大衆の 1 人になります ;) data.table の解決策は次のとおりです。

DT[ , Bmean := mean(B), by=A]

DT単純にどこですか

library(data.table)
DT <- data.table( <your data frame> )
于 2013-04-06T06:19:21.107 に答える