2012-06-08 12 views
35

otrzymał próbkę ramka danych:Oblicz rząd oznacza na podzbiór kolumn

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 

Jaki jest najlepszy sposób, aby utworzyć drugą ramkę danych, które zawierają kolumnę ID i średnią z każdego wiersza? Coś takiego:

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

coś podobnego do:

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

Chciałbym zachować środki wyrównane z ich ID wieku.

Odpowiedz

33

Oblicz rząd oznacza na podzbiór kolumn:

Utwórz nowy data.frame który określa pierwszy kolumna z DF jako kolumna o nazwie ID i oblicza średnią wszystkich pozostałych pól w tym wierszu i umieszcza ją w kolumnie zatytułowanej "Środki":

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

Począwszy ramki danych DF, można użyć pakietu 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

Dzięki. Zwróć też uwagę na 'class (DF)', że nie zamykasz 'data.frame' w tym sensie, że każda funkcja szukająca obiektu' data.frame' powinna zaakceptować 'DF' po' setDT' (szczególnie, że 'data.table' jest po dojrzałej stronie) – MichaelChirico

+0

Co, jeśli chcę zamiast tego w wierszu między C2 a C3? – user3841581

+4

Następnie możesz użyć 'DF [,. (Mean = rowMeans (.SD)), by = ID, .SDcols = c (" C2 "," C3 ")]'. Argument '.SDcols' określa, które kolumny mają być uwzględnione w' .SD'. @ user3841581 – BenBarnes

8

Można utworzyć nowy wiersz z $ w ramce danych odpowiadających Środki

DF$Mean <- rowMeans(DF[,2:4]) 
Powiązane problemy