我试图找出重复测量得分的平均差异。问题是,并非每次观察都经常不均衡地测量,而列中的值代表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是一个问题,因为我知道某些部分中有数据,但它无法计算平均差异。
答案 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
的实际SD
和ID
可以计算为:
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