R 计算列子集上的行平均值
给定一个示例数据帧:R 计算列子集上的行平均值,r,dataframe,R,Dataframe,给定一个示例数据帧: 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 类似于: RM<-row
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
类似于:
RM<-rowMeans(DF[,2:4])
RM从数据框DF
开始,您可以使用数据。表
包:
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
从数据帧开始,您可以使用数据表包:
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
计算列子集上的行平均值:
创建一个新的data.frame,将DF中的第一列指定为名为ID的列,并计算该行上所有其他字段的平均值,然后将其放入名为“Means”的列中:
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
计算列子集上的行平均值:
创建一个新的data.frame,将DF中的第一列指定为名为ID的列,并计算该行上所有其他字段的平均值,然后将其放入名为“Means”的列中:
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
您可以在与平均值相对应的数据框中创建一个具有$
的新行
DF$Mean <- rowMeans(DF[,2:4])
DF$Mean您可以在与平均值对应的数据框中使用$
创建新行
DF$Mean <- rowMeans(DF[,2:4])
DF$Mean使用dplyr:
或
使用dplyr:
或
(另一种解决方案是使用最新的Tidyr
更新版本中的pivot\u longer
和pivot\u wide
)
您应该尝试使用pivot_longer将数据从宽到长的格式读取pivot_longer和pivot_longer上的最新tidyR更新()
库(tidyverse)
C1(另一种解决方案,使用最新的Tidyr
更新中的pivot\u longer
和pivot\u wide
)
您应该尝试使用pivot_longer将数据从宽到长的格式读取pivot_longer和pivot_longer上的最新tidyR更新()
库(tidyverse)
C1row意味着
很好,但如果您仍在试图了解apply
函数族,这是一个开始理解它的好机会
DF['Mean'] <- apply(DF[,2:4], 1, mean)
DF['Mean']rowMeans
很好,但如果您仍在试图了解apply
函数系列,这是一个开始理解它的好机会
DF['Mean'] <- apply(DF[,2:4], 1, mean)
DF['Mean']谢谢。从class(DF)
中还要注意,您不会丢失data.frame
,因为任何查找data.frame
对象的函数都应该在setDT
之后接受DF
(尤其是现在data.table
已经成熟)如果我只想要C2和C3之间的行平均值呢?那么您可以使用DF[,(mean=rowMeans(.SD)),by=ID,.SDcols=c(“C2”,“C3”)]
。参数.SDcols
确定要包含在.SD
中的列@user3841581@BenBarnes在我的例子中,我不确定我想要采用的实际列数,在某些情况下,它们可能是196列,而在其他情况下,它们可能是198列,以此类推。但有一个很常见的是他们名字的首字母,像Mgw.1,Mgw.2。。。Mgw.196类似的第1、2级。。。Hel.198所以我想做的是不要触摸data.table的最初5列,然后所有具有首字母Mgw的列,获取它们的rowMeans并将其分配给Mgw(删除所有单独的列,只保留一个具有平均值的列),等等,对于其余的列。你能告诉我怎么做吗?@新手这听起来像是个新问题,你应该自己发帖。谢谢。从class(DF)
中还要注意,您不会丢失data.frame
,因为任何查找data.frame
对象的函数都应该在setDT
之后接受DF
(尤其是现在data.table
已经成熟)如果我只想要C2和C3之间的行平均值呢?那么您可以使用DF[,(mean=rowMeans(.SD)),by=ID,.SDcols=c(“C2”,“C3”)]
。参数.SDcols
确定要包含在.SD
中的列@user3841581@BenBarnes在我的例子中,我不确定我想要采用的实际列数,在某些情况下,它们可能是196列,而在其他情况下,它们可能是198列,以此类推。但有一个很常见的是他们名字的首字母,像Mgw.1,Mgw.2。。。Mgw.196类似的第1、2级。。。Hel.198所以我想做的是不要触摸data.table的最初5列,然后所有具有首字母Mgw的列,获取它们的rowMeans并将其分配给Mgw(删除所有单独的列,只保留一个具有平均值的列),等等,对于其余的列。你能告诉我怎么做吗?@Newbie这听起来像个新问题,你应该自己发布。你是说“新专栏”吗?你是说“新专栏”吗?
DF['Mean'] <- apply(DF[,2:4], 1, mean)