r - R lapply循环进入灵活向量并通过后缀重命名变量
问题描述
我有一个灵活的组合向量(在现实生活中它可能会有很大差异并且取决于外部表,所以我不能切片或使用交叉,或者取决于我的 df 中变量的名称本身)。
我想对我的 df 中的变量进行分组/总结,其名称与“可能梳”向量中的名称匹配。然后将“_sum”后缀应用于输出变量名称,例如 Jon.A_sum。
在我的 df 中,我有几个变量,并非所有变量都应该总结,而只有一个与“可能的梳子”名称匹配的选定且灵活的列表。
在这段代码中,如果可能的话,我想念如何在 lapply 步骤中使用 _sum 后缀重命名输出变量,但我对其他循环方法持开放态度。
possible_comb <- c("Jon.A", "Bill.C", "Maria.E", "Ben.D")
Jon.A <- c(23, 41, 32, 58, 26)
Bill.C <- c(13, 41, 35, 18, 66)
v3 <- c(3,34, 33, 34, 23)
weight <- c(2, 2, 3,3, 6)
df <- data.frame(Jon.A,Bill.C,v3,weight)
setDT(df)
df_grouped<- df[, lapply(.SD, sum), by=c("weight") , .SDcols=possible_comb]
#wanted results
Jon.A_sum <- c(64, 90, 26)
Bill.C_sum <- c(54,53, 66)
weight <- c(2,3, 6)
wanted <- data.frame(Jon.A_sum,Bill.C_sum,weight)
解决方案
data.table
解决方案 -
library(data.table)
possible_comb <- c("Jon.A", "Bill.C")
new_cols <- paste0(possible_comb, '_sum')
df_grouped<- df[, setNames(lapply(.SD, sum), new_cols),
by=c("weight") , .SDcols=possible_comb]
df_grouped
# weight Jon.A_sum Bill.C_sum
#1: 2 64 54
#2: 3 90 53
#3: 6 26 66
在dplyr
您可以使用across
withgroup_by
并使用.names
.
library(dplyr)
df %>%
group_by(weight) %>%
summarise(across(all_of(possible_comb), sum, .names = '{col}_sum'))
# weight Jon.A_sum Bill.C_sum
# <dbl> <dbl> <dbl>
#1 2 64 54
#2 3 90 53
#3 6 26 66
推荐阅读
- css - 如何在上按钮和下面板接触的空间去除边框以使其看起来像合并?
- ruby-on-rails - 整数模型属性在 assert_equal 调用中转换为字符串
- javascript - Jquery获取嵌套选择器的文本不是孩子
- c++ - 如何导出模板函数的输出类型?
- php - 在 Wordpress 循环中调用自定义字段值?
- angular-cli - SSL 与 Angular-cli
- php - 如何将 PHP 循环分成两部分?
- javascript - 图表js的多行标签
- android - 绑定服务时如何修复“包不在白名单中”?
- postgresql - Postgres:优化查询“WHERE id IN (...)”