简单的功能/应用组合不起作用

时间:2015-04-21 04:29:44

标签: r

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))

1 个答案:

答案 0 :(得分:0)

有许多方法可以进行分组操作。包dplyrdata.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]