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