数据框架和总结

sil*_*ter 0 r dataframe dplyr

我的数据集:

dt<-data.frame(GrossIncome=seq(0, 10000, by = 1000),
               Turnover= seq(0, 100000, by = 10000),
               Sellers= seq(0, 1, by = 0.1),
               Buyers=seq(0, 1, by = 0.1))
Run Code Online (Sandbox Code Playgroud)

所以我现在想总结这个数据并除以 1000GrossIncomeTurnover

     OUTPUT<-data.frame( 
                   "GrossIncome"=round(sum(dt$GrossIncome)/1000,1),
                   "Turnover"=round(sum(dt$Turnover)/1000,1),
                   "GrossIncomeAndTurnover"=round(((sum(dt$Turnover)+sum(dt$Turnover))/1000),1),
                   "Sellers"=round(sum(dt$Sellers),1),
                   "Buyers"=round(sum(dt$Buyers),1))


  Output                 
         GrossIncome Turnover GrossIncomeAndTurnover Sellers Buyers
1          55      550                   1100     5.5    5.5
Run Code Online (Sandbox Code Playgroud)

那么对于比上面的解决方案更优雅的解决方案有什么建议吗?我尝试使用下面的代码,但此代码仅适用于前两项(GrossIncomeTurnover),但不适用于其余项目。

  dt %>%
  dplyr::select(GrossIncome,Turnover)%>%
  dplyr:: summarise_all(sum,na.rm=TRUE)/1000
Run Code Online (Sandbox Code Playgroud)

那么有人可以帮助我如何解决这个问题吗?

Gre*_*gor 5

我们可以将across()不同的函数应用于不同的列。

dt %>%
  summarize(
    across(c(GrossIncome, Turnover), ~ round(sum(.) / 1000, 1)),
    GrossIncomeAndTurnover = GrossIncome + Turnover,
    across(c(Sellers, Buyers), ~round(sum(.), 1))
  )
#   GrossIncome Turnover GrossIncomeAndTurnover Sellers Buyers
# 1          55      550                    605     5.5    5.5
Run Code Online (Sandbox Code Playgroud)

请注意,在我们的代码中,首先计算GrossIncome和摘要,并在计算中使用这些新创建的变量。我的代码说明了这一点,只需添加它们即可。TurnoverGrossIncomeAndTurnover