【发布时间】:2017-02-01 14:07:48
【问题描述】:
我需要使用以下信息计算按列统计:
> library(dplyr)
> Input <- data_frame(id=c(1,2,2,3,3,3),status=c(T,T,T,F,F,F),attri1=c(T,T,F,F,F,F), attri2=c(T,T,T,T,T,F))
> Input
Source: local data frame [6 x 4]
id status attri1 attri2
(dbl) (lgl) (lgl) (lgl)
1 1 TRUE TRUE TRUE
2 2 TRUE TRUE TRUE
3 2 TRUE FALSE TRUE
4 3 FALSE FALSE TRUE
5 3 FALSE FALSE TRUE
6 3 FALSE FALSE FALSE
通过以下过程生成输出。基本上,sTaT 表示status ==T,对应的属性是T。sFaT 表示status ==F 和attribute == F。 sFaTuId 基于 sFaT 和计数唯一 ID。
> Output <- data_frame(Attri=names(Input)[c(-1,-2)],sTaT=0,sFaT=0, sTaTuId=0)
> for (as in Output$Attri){
sTaT <- Input %>% filter_(as) %>% filter(status) %>% nrow()
sFaT <- Input %>% filter_(as) %>% filter(!status) %>% nrow()
sFaTuId <- Input %>% filter_(as) %>% filter(!status)
%>% select(id) %>% unique() %>% nrow()
Output[Output$Attri==as,]$sTaT <- sTaT
Output[Output$Attri==as,]$sFaT <- sFaT
Output[Output$Attri==as,]$sFaTuId <- sFaTuId
}
> Output
Source: local data frame [2 x 4]
Attri sTaT sFaT sFaTuId
(chr) (dbl) (dbl) (dbl)
1 attri1 2 0 0
2 attri2 3 2 1
但是,当有很多行和属性列时,这个过程会很慢。有没有一种有效的方法来计算这个?
【问题讨论】: