首页 > 解决方案 > 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)

标签: rdataframeloopsdata.tableapply

解决方案


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您可以使用acrosswithgroup_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

推荐阅读