R 计算根据同一数据帧中的两个其他变量更改的变量值的数量

R 计算根据同一数据帧中的两个其他变量更改的变量值的数量,r,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 Ye

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

Name您可以按
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

最后计算该向量的和。

您可以按
名称
分组,并检查
在不同年份之间是否不同

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

最后计算这个向量的和。

首先创建一个数组,给出每个
名称的值的标准偏差。如果没有两个值,则为NA;如果两个值相同,则为0;如果两个值不同,则为>0。其中(…>0)给出了值>0的位置,我们取其长度来获得计数

length(which(tapply(gr$Val, gr$Name, sd) > 0))
## [1] 1

首先创建一个数组,给出每个
名称的值的标准偏差。如果没有两个值,则为NA;如果两个值相同,则为0;如果两个值不同,则为>0。其中(…>0)给出了值>0的位置,我们取其长度来获得计数

length(which(tapply(gr$Val, gr$Name, sd) > 0))
## [1] 1