feat_88 feat_89 feat_90 target
1 0 0 Class_1
0 2 3 Class_1
0 0 0 Class_2
2 1 0 Class_2
0 0 1 Class_3
0 2 0 Class_3
0 23 2 Class_3
您好。需要按类分组然后计算每个feat_变量的零数。对于feat_88,类1的结果应为1,类2的结果应为1,而类3的结果应为3.
实际数据集有144000列和94行。出于某种原因,我的代码只适用于某些cols;它说有些cols显然没有零。它也适用于一些cols。它不适用于前两个cols然后适用于列然后不适用于6 cols然后再次工作。我试过这个
Count0s<-function(x){ #function that counts zeros in a row
x<-ifelse(x==0,1,0)
x<-sum(x)
numzeros<-x
return(numzeros)
}
go1=apply(subset(Pds[,1:94],target=="Class_1"),2,function(x) Count0s(x))
答案 0 :(得分:0)
有许多方法可以进行分组操作。包dplyr
和data.table
对分组操作提供了出色的支持。在基础R中,您可以使用aggregate
进行分组操作。你应该使用哪一个取决于你的风格。通常,dplyr
解决方案更易于阅读,data.table
解决方案更快。
# base R solution
aggregate(. ~ target, data=dat, FUN=function(x) sum(x == 0))
# dplyr solution
require(dplyr)
dat %>% group_by(target) %>% summarise_each(funs(sum(. == 0)))
# data.table solution
require(data.table)
setDT(dat)[, lapply(.SD, function(x) sum(x == 0)), by = target]