R中不同长度的平均值
我试图计算对不同事件的反应的平均分数。我的数据为长格式,每个事件一行,示例数据集R中不同长度的平均值,r,dplyr,R,Dplyr,我试图计算对不同事件的反应的平均分数。我的数据为长格式,每个事件一行,示例数据集data如下: Subject Event R1 R2 R3 R4 Average 1 A 1 2 2 N/A 2.5 1 B 1 1 1 1 1 因此,要获得事件A的平均值,忽略N/A,它将是(R1+R2+R3)/3,而事件B有4个响应。我将dplyr中事件A的平均值计算为: data$average <- data
data
如下:
Subject Event R1 R2 R3 R4 Average
1 A 1 2 2 N/A 2.5
1 B 1 1 1 1 1
因此,要获得事件A的平均值,忽略N/A,它将是(R1+R2+R3)/3,而事件B有4个响应。我将dplyr
中事件A的平均值计算为:
data$average <- data%>%filter(Event == "A") %>% with(data, (R1 + R2 + R3)/4)
data$average%过滤器(事件==“A”)%%>%与(数据,(R1+R2+R3)/4)
我在下一个活动中尝试做同样的事情时遇到了问题…谢谢你的帮助 您不需要一次筛选每个事件
dplyr
能够一次逐个处理所有行。另外,当使用dplyr
时,您不需要在其上下文之外为变量赋值,例如data$average您不需要一次对每个事件进行筛选dplyr
能够一次逐个处理所有行。此外,当使用dplyr
时,您不需要在其上下文之外为变量赋值,例如data$average以下不包括NA值作为平均值计算的一部分(NA.rm=TRUE)。此外,我认为按事件分组很重要。在没有group_by的情况下运行时,计算将合并所有事件,结果值为1.285714(=9/7 obs)
数据%
变异(平均值=平均值(c(R1,R2,R3,R4),na.rm=真)
输出:
Subject Event R1 R2 R3 R4 Average
<dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 A 1 2 2 NA 1.67
2 1 B 1 1 1 1 1
主题事件R1 R2 R3 R4平均值
1 A 12 NA 1.67
21b11
以下不包括NA值作为平均值计算的一部分(NA.rm=TRUE)。此外,我认为按事件分组很重要。在没有group_by的情况下运行时,计算将合并所有事件,结果值为1.285714(=9/7 obs)
数据%
变异(平均值=平均值(c(R1,R2,R3,R4),na.rm=真)
输出:
Subject Event R1 R2 R3 R4 Average
<dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 A 1 2 2 NA 1.67
2 1 B 1 1 1 1 1
主题事件R1 R2 R3 R4平均值
1 A 12 NA 1.67
21b11
您可以使用行平均值
计算数据帧中每一行的平均值。在输入中指定要包括的列。要忽略NA
设置NA.rm=TRUE
data$Average <- rowMeans(data[,c("R1", "R2", "R3", "R4")], na.rm=TRUE)
您可以使用rowMeans
计算数据帧中每一行的平均值。在输入中指定要包括的列。要忽略NA
设置NA.rm=TRUE
data$Average <- rowMeans(data[,c("R1", "R2", "R3", "R4")], na.rm=TRUE)
如果您有多个名为R1
,R2
,…,只需完成前面的所有答案即可R100
,而不是将它们全部写入mean
函数,您可以通过使用pivot\u longer
函数将数据帧重塑为更长的格式,然后按事件分组并计算平均值。最后,使用pivot\u wider
,您可以将数据帧转换为初始的较宽格式
库(dplyr)
图书馆(tidyr)
df%>%在(变量(包含(“R”))处变异,如.numeric)%>%
pivot_longer(cols=以“R”开头),名称为“R”,值为“values”)%>%
分组依据(事件)%>%
变异(平均值=平均值,na.rm=真值))%>%
枢轴(名称从=R,值从=values)
#一个tibble:2x8
#分组:活动[2]
主题事件平均值R1 R2 R3 R4
1 A 2.5 1.67 1 2 NA
21b11
正如@TTS所提到的,您对事件A的平均值的计算有错误
可复制示例
结构(列表)(主题=c(1L,1L),事件=c(“A”,“B”),R1=c(1L,
1),R2=2:1,R3=2:1,R4=c(“不适用”,“1”),平均值=c(2.5,
1) ),row.names=c(NA,-2L),class=c(“data.table”,“data.frame”
),.internal.selfref=)
如果您有多个名为R1
,R2
R100
,而不是将它们全部写入mean
函数,您可以通过使用pivot\u longer
函数将数据帧重塑为更长的格式,然后按事件分组并计算平均值。最后,使用pivot\u wider
,您可以将数据帧转换为初始的较宽格式
库(dplyr)
图书馆(tidyr)
df%>%在(变量(包含(“R”))处变异,如.numeric)%>%
pivot_longer(cols=以“R”开头),名称为“R”,值为“values”)%>%
分组依据(事件)%>%
变异(平均值=平均值,na.rm=真值))%>%
枢轴(名称从=R,值从=values)
#一个tibble:2x8
#分组:活动[2]
主题事件平均值R1 R2 R3 R4
1 A 2.5 1.67 1 2 NA
21b11
正如@TTS所提到的,您对事件A的平均值的计算有错误
可复制示例
结构(列表)(主题=c(1L,1L),事件=c(“A”,“B”),R1=c(1L,
1),R2=2:1,R3=2:1,R4=c(“不适用”,“1”),平均值=c(2.5,
1) ),row.names=c(NA,-2L),class=c(“data.table”,“data.frame”
),.internal.selfref=)
我认为你的na.rm=TRUE
需要生活在向量之外。我认为你的na.rm=TRUE
需要生活在向量之外。
data$Average <- rowMeans(data[,grep("R",names(data))], na.rm=TRUE)