R聚合FUN =头

时间:2018-02-02 18:33:52

标签: r aggregate

我想通过两列(序列和程序)聚合一个表(tab)来获得sampleize的顶行(FUN = head)。

sq <- c(1,1,1,1,1,1) 
prog<- c('A','A','B','B','C','C') 
ss <- c(47,47,28,28,47,47) 
tab<- data.frame(sq,prog,ss)

聚合给我一个奇怪的结果,如果样本大小对于序列和程序的不同组合是相同的 - 它会省略它。

agg  <- aggregate(cbind(sq,prog) ~ ss, data = tab, FUN=head,1,na.rm=TRUE)

我很困惑为什么会发生这种情况以及为什么它在文本(A,B,C)时将程序更改为数字序列。

1 个答案:

答案 0 :(得分:2)

这是因为默认情况下,data.frame会根据字符列创建一个因子。你需要:

tab <- data.frame(sq, prog, ss, stringsAsFactors = FALSE)
编辑:我个人认为dplyr包非常直观。为了您的结果,我使用:

library(dplyr)
tab %>%
  group_by(sq, prog) %>% 
  filter(row_number() == 1)