我的数据集:
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)
所以我现在想总结这个数据并除以 1000GrossIncome和Turnover。
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)
那么对于比上面的解决方案更优雅的解决方案有什么建议吗?我尝试使用下面的代码,但此代码仅适用于前两项(GrossIncome和Turnover),但不适用于其余项目。
dt %>%
dplyr::select(GrossIncome,Turnover)%>%
dplyr:: summarise_all(sum,na.rm=TRUE)/1000
Run Code Online (Sandbox Code Playgroud)
那么有人可以帮助我如何解决这个问题吗?
我们可以将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