2012-06-08 2 views
35

のサブセットに意味:計算行は、サンプル・データ・フレームを考えるコラム

C1<-c(3,2,4,4,5) 
C2<-c(3,7,3,4,5) 
C3<-c(5,4,3,6,3) 
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3) 

DF 
    ID C1 C2 C3 
    1 A 3 3 5 
    2 B 2 7 4 
    3 C 4 3 3 
    4 D 4 4 6 
    5 E 5 5 3 

ID列と各行の平均値が含まれます第二のデータフレームを作成するための最良の方法は何ですか?このような何か:

ID Mean 
A 3.66 
B 4.33 
C 3.33 
D 4.66 
E 4.33 

に似た何か:私は彼らのID年代に合わせ手段を維持したいと思い

RM<-rowMeans(DF[,2:4]) 

答えて

33

計算列は、列のサブセットに意味:

は、最初に指定する新しいdata.frameを作成します。列をIDと呼ばれる列としてDFから取得し、その行の他のすべてのフィールドの平均を計算し、それを「手段」という列に入れます。

data.frame(ID=DF[,1], Means=rowMeans(DF[,-1])) 
    ID Means 
1 A 3.666667 
2 B 4.333333 
3 C 3.333333 
4 D 4.666667 
5 E 4.333333 
21

データフレームDF以降では、data.tableパッケージを使用することができます。

library(data.table) 

## EDIT: As suggested by @MichaelChirico, setDT converts a 
## data.frame to a data.table by reference and is preferred 
## if you don't mind losing the data.frame 
setDT(DF) 

# EDIT: To get the column name 'Mean': 

DF[, .(Mean = rowMeans(.SD)), by = ID] 

#  ID  Mean 
# [1,] A 3.666667 
# [2,] B 4.333333 
# [3,] C 3.333333 
# [4,] D 4.666667 
# [5,] E 4.333333 
+1

おかげで、対応するデータフレームに$で新しい行を作成することができます。また、 'data.frame'オブジェクトを探している関数が' setDT'の後に 'DF'を受け入れるという意味で、' data.frame'を_lose_しない 'class(DF)'からも注意してください。 'data.table'は成熟した側にあります) – MichaelChirico

+0

代わりにC2とC3の間の行平均を使用したいのですが? – user3841581

+4

次に、 'DF [、。(Mean = rowMeans(.SD))、= ID、.SDcols = c(" C2 "、" C3 ")]'を使用できます。引数 '.SDcols'は' .SD'に含めるカラムを決定します。 @ user3841581 – BenBarnes

8

あなたは手段に

DF$Mean <- rowMeans(DF[,2:4]) 
関連する問題