Вычислить средние значения ряда по подмножеству столбцов

Учитывая образец фрейма данных:

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

Что-то похожее:

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

Я хотел бы, чтобы средства соответствовали ихID& APOS; с.

Ответы на вопрос(4)

Решение Вопроса

Calculate row means on a subset of columns:

Создайте новый data.frame, который задает первый столбец из DF как столбец с именем ID, вычисляет среднее значение всех других полей в этой строке и помещает его в столбец, озаглавленный «Средства»:

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

С помощьюdplyr:

library(dplyr)

# exclude ID column then get mean
DF %>%
  transmute(ID,
            Mean = rowMeans(select(., -ID)))

Или же

# select the columns to include in mean
DF %>%
  transmute(ID,
            Mean = rowMeans(select(., C1:C3)))

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

Вы можете создать новую строку с$ в вашем фрейме данных, соответствующих средствам

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

Начиная с вашего фрейма данных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
 24 февр. 2016 г., 13:38
Тогда вы можете использоватьDF[, .(Mean = rowMeans(.SD)), by = ID, .SDcols = c("C2", "C3")], Аргумент.SDcols определяет, какие столбцы вы хотите включить в.SD, @ user3841581
 26 февр. 2016 г., 05:58
отлично сработано. Работает отлично. +1
 23 февр. 2016 г., 23:44
Что, если я хочу вместо этого означать строку между C2 и C3?
 26 июл. 2015 г., 16:40
Благодарю. Также обратите внимание отclass(DF) что вы неlose data.frameв том смысле, что любая функция ищетdata.frame объект должен принятьDF послеsetDT (особенно сейчас, когдаdata.table на зрелой стороне)
 27 июл. 2016 г., 17:39
@BenBarnes В моем случае я не уверен относительно фактического количества столбцов, которые я хочу взять rowMeans, они могут быть 196 в некоторых случаях, 198 в других и так далее. Но один тонкий, который является общим, является инициалом их имени, которые похожи на Mgw.1, Mgw.2 ... Mgw.196 аналогично Hel.1, Hel.2 ... Hel.198 Так что я хочу сделать, это не коснитесь начальных 5 столбцов data.table, затем всех тех, у которых есть инициалы Mgw, возьмите их rowMeans и назначьте их MGW (удалите все отдельные столбцы, просто оставьте один со средним значением) и так далее для остальных столбцов. Можете ли вы направить меня, как я могу это сделать?

Ваш ответ на вопрос