R 如何使用分数数据计算可变列数的平均变化

R 如何使用分数数据计算可变列数的平均变化,r,R,我试图找出重复测量中分数的平均差异。问题是,并不是每项观察都经常被不平等地衡量,列中的值代表6分制的分数 数据以长格式和宽格式呈现,如下所示: ID Type M1 M2 M3 M4 M6 1 A 5 5 3 2 A 4 3 1 3 A 2 5 3 5 5 4 C 5 4 4 3 5

我试图找出重复测量中分数的平均差异。问题是,并不是每项观察都经常被不平等地衡量,列中的值代表6分制的分数

数据以长格式和宽格式呈现,如下所示:

ID    Type    M1    M2    M3    M4    M6
1      A       5     5    3
2      A       4     3    1
3      A       2     5    3     5      5
4      C       5     4    4     3
5      B       3 
6      F       4     2    3     4      1
这是另一种格式:

ID    Type    M    Score
1       A     1      5
1       A     2      5
1       A     3      3
2       A     1      4
2       A     2      3
2       A     3      1
4       C     1      5
4       C     2      4
4       C     3      4
4       C     4      3
我对中间值不是很感兴趣,但是我需要M1和ID的最后一个度量值之间的差值,然后我需要取这些差值的平均值。我将需要在所有类型中都这样做,然后再按类型细分

安装的软件包有:dplyr、purrr、stringr、tydir、tibble、data.table

我得到的最接近的结果如下:

df %>% group_by(M)%>%
    arrange(M)%>%
    summarize(avg = as.numeric(mean(diff(Score))), sd = 
as.numeric(sd(diff(Score))))

这是在长格式数据上完成的,并给出了结果:

       M           avg       sd
     <fctr>       <dbl>    <dbl>
 1            1          NA       NA
 2            2          NA       NA
 3            3 -0.03370787 1.741534
 4            4 -0.04878049 2.036556
 5            5 -0.18181818 1.887760
 6            6  0.00000000 1.095445
 7            7         NaN       NA
 8            8         NaN       NA
 9            9         NaN       NA
10         <NA> -0.16666667 1.722401
M平均标准差
1纳纳
2 NA NA
3            3 -0.03370787 1.741534
4            4 -0.04878049 2.036556
5            5 -0.18181818 1.887760
6            6  0.00000000 1.095445
7南那
8南那
9南那
10          -0.16666667 1.722401

上表取自我的分析,与示例表无关。NA和NaN是一个问题,因为我知道某些部分有数据,但无法计算平均差异

每个
ID
avg
的一个解决方案是基于OP反馈使用
dplyr
计算第一次和最后一次测量的平均差值

library(dplyr)

df %>% group_by(ID) %>%
  arrange(M) %>%
  summarise(avg = abs(first(Score) - last(Score))/n())

#Result
#     ID   avg
#  <int> <dbl>
#1     1 0.667
#2     2 1.00 
#3     4 0.500

请在代码中包含您使用过的任何包的名称
%%>%%
给了我一个错误。您的预期结果是什么?为了澄清,您需要每个ID的M的平均值和sd吗?这就是您的代码试图做的,但是您的文本表明您只需要MSorry的第一个和最后一个值之间的差异,我忘了包括包,它们在我的标准启动库中,所以我通常会考虑它们。我使用:dplyr、purr、tidyr和tibbleAwesome,谢谢你的帮助。代码目前看起来有点凌乱,但暂时可以。谢谢你的快速回答。@ssvenkerud很高兴它帮助了你。您可以修改您的问题,以便将来的用户了解。也许这也会让人们喜欢你的问题。
library(dplyr)

df %>% group_by(ID) %>%
  arrange(M) %>%
  summarise(avg = abs(first(Score) - last(Score))/n())

#Result
#     ID   avg
#  <int> <dbl>
#1     1 0.667
#2     2 1.00 
#3     4 0.500
df %>% group_by(ID) %>%
  arrange(M) %>%
  summarise(avg = mean(Score), SD = sd(Score))

#Result
     ID   avg    SD
  <int> <dbl> <dbl>
1     1  4.33 1.15 
2     2  2.67 1.53 
3     4  4.00 0.816