我想通过两列(序列和程序)聚合一个表(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)时将程序更改为数字序列。
答案 0 :(得分:2)
这是因为默认情况下,data.frame
会根据字符列创建一个因子。你需要:
tab <- data.frame(sq, prog, ss, stringsAsFactors = FALSE)
编辑:我个人认为dplyr
包非常直观。为了您的结果,我使用:
library(dplyr)
tab %>%
group_by(sq, prog) %>%
filter(row_number() == 1)