dplyr-aggregate数据框聚合

> counts
       cell.1 cell.2 cell.3 cell.4 cell.5
gene.1      2      4      3      3      3
gene.2      6      4      3      3      0
gene.3      1      2      3      3      3
gene.4      8      9      0      3      0

对数据框的行进行聚合

row.agg.list <- c('x_1','x_2','x_1','x_3')
counts %>% data.table::data.table() %>% aggregate(by=list(row.agg.list), FUN=sum) %>% 
    tibble::column_to_rownames(var = "Group.1") 
#######################################
    cell.1 cell.2 cell.3 cell.4 cell.5
x_1      3      6      6      6      6
x_2      6      4      3      3      0
x_3      8      9      0      3      0

对数据框的列进行聚合

col.agg.list <- c('cll.a','cll.a','cell.b','cell.c','cell.c')
counts %>% t() %>% data.table::data.table() %>% aggregate(by=list(col.agg.list), FUN=mean) %>% 
    tibble::column_to_rownames(var = "Group.1") %>% t()
#######################################
       cell.b cell.c cll.a
gene.1      3    3.0   3.0
gene.2      3    1.5   5.0
gene.3      3    3.0   1.5
gene.4      0    1.5   8.5
这段代码的作用是将数据 `query` 按 `ID` 和 `hour` 列进行分组,然后计算每个组合中 `NO` 列的观测值个数,最后生成一个新的数据。 需要注意的是,这里使用了 R 中的 `aggregate` 函数,它的基本语法是 `aggregate(formula, data, FUN)`,其中 `formula` 表示需要聚合的列(或变量)和聚合函数的组合,`data` 表示数据,`FUN` 表示聚合函数。在这个例子中,`formula` 是 `NO~ID+hour`,表示需要聚合的是 `NO` 列,而 `ID` 和 `hour` 列是聚合的条件;`data` 是 `query` 数据,`FUN` 是 `length` 函数,表示计算每个组合中 `NO` 列的观测值个数。 以下是一个示例代码,用于将数据 `df` 转换为按 `ID` 列进行分组的数据,其中每个小时作为新数据的列名,使用频数填充新数据中的值: ```R # 假设数据为df,ID列为id,小时列为hour,频数列为NO # 将数据按ID和小时列进行分组,并计算每个组合中NO列的观测值个数 hour_freq <- aggregate(NO ~ ID + hour, df, length) # 将小时列转换为每个小时的列,并填充观测值个数 hour_freq_wide <- reshape(hour_freq, idvar = "ID", timevar = "hour", direction = "wide") # 重命名列名 colnames(hour_freq_wide)[-1] <- paste0("hour_", colnames(hour_freq_wide)[-1]) # 最终结果 hour_freq_wide ``` 需要注意的是,上述代码中使用了 `reshape` 函数将小时列转换为每个小时的列,并填充观测值个数。也可以使用其他函数(如 `dcast` 函数)来完成这个操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪桦

有帮助的话请杯咖啡吧,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值