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)