我有下面的数据框,我想计算有多少学生(Name
)将他们的成绩(Val
)从2018
更改为2019
。结果应该为1,因为只有Bob
对其进行了更改。
Name<-c("bb","Bob","df","asd","Bob","df","asd","jkl")
Year<-c(2018,2018,2018,2018,2019,2019,2019,2019)
Val<-c(9,4,6,7,9,6,7,7)
gr<-data.frame(Name,Year, Val)
Name Year Val
1 bb 2018 9
2 Bob 2018 4
3 df 2018 6
4 asd 2018 7
5 Bob 2019 9
6 df 2019 6
7 asd 2019 7
8 jkl 2019 7
答案 0 :(得分:1)
您可以按Name
分组,检查Val
在年份之间是否不同。
sum(with(gr, ave(Val, Name, FUN = function(x) x[1]) != Val))
# [1] 1
逐步
对于每个名称,用第一年(即2018年)的值替换2019年的值。
with(gr, ave(Val, Name, FUN = function(x) x[1]))
#[1] 9 4 6 7 4 6 7 7
然后检查这些值在年份之间是否没有差异
with(gr, ave(Val, Name, FUN = function(x) x[1]) != Val)
# [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
最后计算这个向量的和。
答案 1 :(得分:1)
首先创建一个给出每个controller.add(2);
值的标准偏差的数组。如果没有两个值,则为NA;如果两个值相同,则为0;如果两个值不同,则为> 0。其中(...> 0)给出值> 0的位置,并取其长度来获取计数。
StreamController