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

时间:2018-03-02 22:21:07

标签: r

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

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

Pipeline p = ...;

// A Read from a GCS file (runs locally and using remote execution):
Schema schema = new Schema.Parser().parse(new File("schema.avsc"));
PCollection<GenericRecord> records =
    p.apply(AvroIO.readGenericRecords(schema)
            .from("gs://my_bucket/path/to/records-*.avro"));

这是替代格式:

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

我对临时值并不感兴趣,但我需要M1之间的区别,不管是该ID的最后一次测量,我需要考虑这些差异的平均值。我将需要跨所有类型执行此操作,然后按类型细分。

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

我得到的最接近的是:

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

avg ID的一个解决方案可能是基于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

每个average的实际SDID可以计算为:

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