我有下表(称为火车)(实际上更大)
UNSPSC adaptor alert bact blood collection packet patient ultrasoft whit
514415 0 0 0 0 0 0 0 1 0
514415 0 0 0 1 0 0 0 1 0
514415 0 0 1 0 0 0 0 1 0
514415 0 0 0 0 0 0 0 1 0
514415 0 0 0 0 0 0 0 1 0
514415 0 0 0 0 0 0 0 1 0
422018 0 0 0 0 0 0 0 1 0
422018 0 0 0 0 0 0 0 1 0
422018 0 0 0 1 0 0 0 1 0
411011 0 0 0 0 0 0 0 1 0
我想计算每列唯一UNSPSC的数量,其中值等于1.因此对于柱血,它将为2,对于列ultrasoft,将为3。
我这样做但不知道如何继续:
apply(train[,-1], 2, ......)
我正试图不使用循环。
答案 0 :(得分:4)
要从您离开的地方继续,我们可以将apply
与margin=2
一起使用,并计算length
的{{1}}值" UNSPSC"对于每一列。
unique
更好的选择是使用apply(train[-1], 2, function(x) length(unique(train$UNSPSC[x==1])))
#adaptor alert bact blood collection packet
# 0 0 1 2 0 0
#patient ultrasoft whit
# 0 3 0
/ sapply
,它会产生相同的结果,但与lapply
不同,它不会将数据帧转换为矩阵。
apply
答案 1 :(得分:-1)
如果您的列只有0和1,就像在示例中一样,只需使用colSums:
colSums(train [, - 1])#在使用前删除非数字列,如UNSPSC
# adaptor alert bact blood collection packet patient
# 0 0 1 2 0 0 0
# ultrasoft whit
# 10 0