2017-11-15 9 views
0

特定の列の値の平均値を見つけて、それを新しい列に追加しようとしています。特定の名前の特定の列の平均値を取得する

私は、文字要素のリストを含む変数を持ち、これらの要素は特定の列名に対応しています。例えば、

qcs <- list.files(qcDirectory) 
str(qcs) 
chr [1:5] "201701" "201702" "201703" "201704" 

は、ここで例のデータテーブルです:

 201701 201702 201703 201704 
row1 12  20  50  54 
row2 15  23  45  35 
row3 16  20  52  58 
row4 17  13  47  48 

は、例えば、私は「201701」と「201702」という名前の列に含まれる値の平均値を取得したいのですが、

 201701 201702 201703 201704 mean 
row1 12  20  50  54  16 
row2 15  23  45  35  19 
row3 16  20  52  58  18 
row4 17  13  47  48  15 

テーブルのどこにでも出現する可能性があるため、最初のx個の列には適用できません。私はlapplyが行く方法かもしれないと思っていますが、私はどのようにこれを動作させるか分からない。普通の英語では、基本的に、この変数[qcs]に含まれているすべての列名に対して、それらの値の平均を見つけることが必要です。何らかのループが必要なのかどうか、わからない。私は答えが既にそこにあると確信していますが、私はノブで、thisthisのような類似の投稿を適用しようとすると問題があります。私は、以下のように曖昧に思っています。これは、操作する右の列を正しく識別できますが、関連する列の行全体の値を平均化するのではなく、各列の値を平均してリストを出力するだけです。それらを新しい列に入れます。任意のアイデアが評価されます。

sapply(colnames(datamatrix), function(c) { 
    if (c %in% qcs) datamatrix$mean = mean(test1[, c]) 
}) 

答えて

1

は、これはあなたが何ができるかです。関心のある列を次のようにベクトル列に格納します。その後、適用を使用します。

col=c('201701','201702') df$mean=apply(df[,col],1,mean)

0

あなたはループを必要としません:

datamatrix$mean = rowMeans(datamatrix[,qcs]) 
1

これは、列のいくつかの異なる組み合わせのためにこれを計算する場合があります(私は理解して)いるので、あなたの状況にうまく収まる戦略でなければなりません。

irisデータセットを使用して説明します。各行に対して、対応する行の"Sepal.Width"および"Petal.Width"列の値の平均である新しい列を追加するとします。ここには、関連する列名を保持するベクトルがあります(ここでは、理解しているように、列名のパターンによって選択されています)。

data(iris) 
cname_pattern <- "Width" 
target_cols <- grep(cname_pattern, names(iris), value=TRUE) 

次に、あなただけの

iris[[paste0(cname_pattern, "_mean")]] <- rowMeans(iris[, target_cols]) 

を言うことができますし、新しい列の各行に関連する列の平均値を取得します。これは、手元のケースにフィットするほど柔軟でなければなりません。可能であればどこでも値が欠落する可能性がある場合は、をrowMeans()に使用したい場合があります。

1

dplyrを使用して、データテーブルとしてdfを想定して、あなたが行うことができます:

select(df,c(201701,201702)) %>% summarise_all(mean) 

dplyrはあなたがmatchesstarts_withなどのヘルパーを使用することができるようグループの列を選択するための柔軟性を追加できます、containsなど

関連する問題