2017-10-12 15 views
2

申し訳ありませんが、間違った検索語を使用していますが、解決策が見つかりませんでした。R:テーブルの行を平均値で置き換える方法

id <- c(rep(1,6),rep(2,6)) 
par1 <- c(rep("a",9),rep("b",3)) 
par2 <- c(rep("c",3),rep("d",9)) 
val <- rnorm(12) 
data <- data.frame(id,par1,par2,val) 

私は「ID」に対して同一の値を持つすべての行を置き換えることができます方法:2人の参加者(ID)、2つの様々なパラメータ(PAR1、PAR2)の下で、各タスクを実行すると、6回の実験を考えると

、 "par1"、 "par2"のいずれかの行を、行の "val"値の平均値とします。 dplyrアプローチのために

id par1 par2 val 
1 a c (mean of row 1-3) 
1 a d (mean of row 4-6) 
2 a d (mean of row 7-9) 
2 b d (mean of row 10-12) 
+4

'データ<のmeanを得ます。フレーム(id、par1、par2、val);集計(val〜。、data、mean) ' –

+1

これは私が必要とするものです!ありがとうございました!あなたが何をすべきかを知っているならば、Rはとても簡単です。正式な回答として投稿しますか? –

答えて

2

library(dplyr) 

set.seed(123) # for reproducibility 

id <- c(rep(1, 6), rep(2, 6)) 
par1 <- c(rep("a", 9), rep("b", 3)) 
par2 <- c(rep("c", 3), rep("d", 9)) 
val <- rnorm(12) 
data <- data.frame(id, par1, par2, val) 

# group by all variables except `val` 
data %>% group_by_at(vars(-val)) %>% summarize(val = mean(val)) 

できます:ここで

# A tibble: 4 x 4 
# Groups: id, par1 [?] 
    id par1 par2  val 
    <dbl> <fctr> <fctr>  <dbl> 
1  1  a  c 0.2560184 
2  1  a  d 0.6382870 
3  2  a  d -0.4969993 
4  2  b  d 0.3794112 
+0

ありがとう、それも同様に動作します。しかし、すべてがグループ化されている列を明確に列挙することなく方法があるのでしょうか?私の実際のデータには、約30のパラメータがあります。 –

1

data.tableとオプションである

結果はこのように、このようなテーブルです。データ - 'ID'、 'PAR1'、 'PAR2' によってグループ化され、(setDT(data)) 'data.table' から 'data.frame' を変換し、 'ヴァル'

library(data.table) 
setDT(data)[, .(val = mean(val)), by = .(id, par1, par2)] 
関連する問題