【问题标题】:R Aggregate FUN=headR 聚合 FUN=head
【发布时间】:2018-02-03 03:13:06
【问题描述】:

我想按两列(序列和程序)聚合一个表(选项卡)以获得样本大小的顶行(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)

Aggregate 给了我一个奇怪的结果,如果序列和程序的不同组合的样本量相同 - 它会忽略它。

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

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

【问题讨论】:

  • 你的聚合错误:agg &lt;- aggregate(ss ~ sq + prog, data = tab, FUN=head,1,na.rm=TRUE)

标签: r aggregate


【解决方案1】:

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

tab <- data.frame(sq, prog, ss, stringsAsFactors = FALSE)

编辑:我个人觉得dplyr 包非常直观。对于您的结果,我会使用:

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

【讨论】:

  • 这回答了为什么它给我数字而不是汇总表中的字母。但是,主要问题仍然存在:它忽略了对于不同的序列和程序组合,样本量可能相同的记录?
  • 好吧,我还没意识到。我现在已经相应地编辑了我的答案。
猜你喜欢
  • 2015-12-16
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多