计算一个变量根据同一数据框中的其他两个变量更改了多少个值

时间:2019-01-24 23:21:24

标签: r

我有下面的数据框,我想计算有多少学生(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

2 个答案:

答案 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